From c04a0ac0088477e63dc82aec0c13426d1b94ca4a Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Tue, 17 Dec 2024 15:26:54 +0100 Subject: [PATCH] Add localization --- Yapper.lua | 90 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 71 insertions(+), 19 deletions(-) diff --git a/Yapper.lua b/Yapper.lua index bb6de0b..a649ad0 100644 --- a/Yapper.lua +++ b/Yapper.lua @@ -1,6 +1,39 @@ local addonname, shared = ... ---@cast addonname string +local _L = { + ["EN"] = { + ["NO_MESSAGE"] = "Yapper found no message to yap", + ["NO_CHANNEL"] = "Yapper found no channel to yap in", + ["NO_CHANNEL_ID"] = "Yapper found no channel id for %s", + ["NO_INTERVAL"] = "Yapper has no interval set", + ["YAPPER_TOGGLE"] = "Yapper is now %s", + ["YAPPER_INTERVAL_SET"] = "Yapper interval set to %d", + ["YAPPER_MESSAGE_SET"] = "Yapper message set to %s", + ["YAPPER_CHANNEL_SET"] = "Yapper channel set to %s with data %s", + ["YAPPER_CHANNEL_SET_NIL"] = "Yapper channel set to nil", + ["YAPPER_LANGUAGE_SET"] = "Yapper language set to %s", + ["YAPPER_LANGUAGE_NOT_FOUND"] = "Yapper language not found", + ["YAPPER_ENABLED"] = "enabled", + ["YAPPER_DISABLED"] = "disabled" + }, + ["RU"] = { + ["NO_MESSAGE"] = "Болтун не нашел сообщение для болтовни", + ["NO_CHANNEL"] = "Болтун не нашел канал для болтовни", + ["NO_CHANNEL_ID"] = "Болтун не нашел ID канала для %s", + ["NO_INTERVAL"] = "У Болтуна не установлен интервал", + ["YAPPER_TOGGLE"] = "Болтун теперь %s", + ["YAPPER_INTERVAL_SET"] = "Интервал Болтуна установлен на %d", + ["YAPPER_MESSAGE_SET"] = "Сообщение Болтуна установлено на %s", + ["YAPPER_CHANNEL_SET"] = "Канал Болтуна установлен на %s с данными %s", + ["YAPPER_CHANNEL_SET_NIL"] = "Канал Болтуна установлен в nil", + ["YAPPER_LANGUAGE_SET"] = "Язык Болтуна установлен на %s", + ["YAPPER_LANGUAGE_NOT_FOUND"] = "Язык Болтуна не найден", + ["YAPPER_ENABLED"] = "включен", + ["YAPPER_DISABLED"] = "выключен" + } +} + local function GetOrDefault(table, keys, default) local value = default if not table then return value end @@ -39,28 +72,21 @@ end ---@field channel string ---@field channelData any ---@field enabled boolean -if not YapperConfig then YapperConfig = {} end +---@field language string ---@cast shared { config: YapperConfig} -shared.config = { - message = GetOrDefault(YapperConfig, { "message" }, ""), - interval = GetOrDefault(YapperConfig, { "interval" }, 1), - channel = GetOrDefault(YapperConfig, { "channel" }, "SAY"), - channelData = GetOrDefault(YapperConfig, { "channelData" }, nil), - enabled = GetOrDefault(YapperConfig, { "enabled" }, false), -} local timer = nil local function Yap() if not shared.config.enabled then return end if not shared.config.message then - print(string.format("Yapper found no message to yap (%s)", tostring(shared.config.message))) + print(string.format(_L[shared.config.language]["NO_MESSAGE"], tostring(shared.config.message))) shared.config.enabled = false return end if not shared.config.channel then - print(string.format("Yapper found no channel to yap in (%s)", tostring(shared.config.channel))) + print(string.format(_L[shared.config.language]["NO_CHANNEL"], tostring(shared.config.channel))) shared.config.enabled = false return end @@ -69,7 +95,7 @@ local function Yap() if shared.config.channel == "CHANNEL" and not tonumber(shared.config.channelData) then data = GetChannelId(shared.config.channelData) if data == nil then - print(string.format("Yapper found no channel id for %s", shared.config.channelData)) + print(string.format(_L[shared.config.language]["NO_CHANNEL_ID"], shared.config.channelData)) shared.config.enabled = false return end @@ -77,7 +103,7 @@ local function Yap() SendChatMessage(shared.config.message, shared.config.channel, nil, data) if not shared.config.interval or shared.config.interval <= 0 then - print("Yapper has no interval set, quitting (%s)", tostring(shared.config.interval)) + print(string.format(_L[shared.config.language]["NO_INTERVAL"], tostring(shared.config.interval))) shared.config.enabled = false return end @@ -94,7 +120,15 @@ local loadedFrame = CreateFrame("Frame") loadedFrame:RegisterEvent("ADDON_LOADED") loadedFrame:SetScript("OnEvent", function(self, event, addonName) if addonName == addonname then - init() + if not YapperConfig then YapperConfig = {} end + shared.config = { + message = GetOrDefault(YapperConfig, { "message" }, ""), + interval = GetOrDefault(YapperConfig, { "interval" }, 1), + channel = GetOrDefault(YapperConfig, { "channel" }, "SAY"), + channelData = GetOrDefault(YapperConfig, { "channelData" }, nil), + enabled = GetOrDefault(YapperConfig, { "enabled" }, false), + language = GetOrDefault(YapperConfig, { "language" }, "EN"), + } end end) @@ -102,25 +136,28 @@ local logoutFrame = CreateFrame("Frame") logoutFrame:RegisterEvent("PLAYER_LOGOUT") logoutFrame:SetScript("OnEvent", function(self, event) shared.config.enabled = false + YapperConfig = shared.config end) SlashCmdList["YAPPER_MAIN_CMD"] = function(input) if input == "" or input == nil then shared.config.enabled = not shared.config.enabled - print(string.format("Yapper is now %s", shared.config.enabled and "enabled" or "disabled")) + print(string.format(_L[shared.config.language]["YAPPER_TOGGLE"], + shared.config.enabled and _L[shared.config.language]["YAPPER_ENABLED"] or + _L[shared.config.language]["YAPPER_DISABLED"])) init() return end if tonumber(input) then shared.config.interval = tonumber(input) - print(string.format("Yapper interval set to %d", shared.config.interval)) + print(string.format(_L[shared.config.language]["YAPPER_INTERVAL_SET"], shared.config.interval)) init() return end shared.config.message = input - print(string.format("Yapper message set to %s", shared.config.message)) + print(string.format(_L[shared.config.language]["YAPPER_MESSAGE_SET"], shared.config.message)) init() end SLASH_YAPPER_MAIN_CMD1 = "/yap" @@ -129,7 +166,7 @@ SlashCmdList["YAPPER_CHANNEL_CMD"] = function(input) if input == "" or input == nil then shared.config.channel = nil shared.config.channelData = nil - print("Yapper channel set to nil") + print(_L[shared.config.language]["YAPPER_CHANNEL_SET_NIL"]) return end @@ -137,11 +174,26 @@ SlashCmdList["YAPPER_CHANNEL_CMD"] = function(input) if #data == 1 then shared.config.channel = data[1] shared.config.channelData = nil - print(string.format("Yapper channel set to %s", shared.config.channel)) + print(string.format(_L[shared.config.language]["YAPPER_CHANNEL_SET"], shared.config.channel)) return end shared.config.channel = data[1] shared.config.channelData = data[2] - print(string.format("Yapper channel set to %s with data %s", shared.config.channel, shared.config.channelData)) + print(string.format(_L[shared.config.language]["YAPPER_CHANNEL_SET"], shared.config.channel, + shared.config.channelData)) end SLASH_YAPPER_CHANNEL_CMD1 = "/yapc" + +SlashCmdList["YAPPER_LANGUAGE_CMD"] = function(input) + input = string.upper(input) + if input == "" or input == nil then + input = "EN" + end + if _L[input] == nil then + print(_L[shared.config.language]["YAPPER_LANGUAGE_NOT_FOUND"]) + return + end + shared.config.language = input + print(string.format(_L[shared.config.language]["YAPPER_LANGUAGE_SET"], shared.config.language)) +end +SLASH_YAPPER_LANGUAGE_CMD1 = "/yapl"