From 638d4d37b48409ac7933bfba3b650e70528dc25d Mon Sep 17 00:00:00 2001 From: F16Gaming Date: Mon, 2 Apr 2012 00:06:21 +0200 Subject: [PATCH] Improved localization features. --- AddonComm.lua | 5 +---- ChatManager.lua | 5 ++--- Command.lua | 8 +++----- CommandManager.lua | 16 +--------------- EventHandler.lua | 1 - Events.lua | 2 +- LocaleManager.lua | 27 +++++++++++++++++++++------ Logger.lua | 2 +- LootManager.lua | 2 +- PlayerManager.lua | 35 +++++++++++++++++------------------ QueueManager.lua | 2 +- RollManager.lua | 2 +- 12 files changed, 50 insertions(+), 57 deletions(-) diff --git a/AddonComm.lua b/AddonComm.lua index f7477e9..6aca5bc 100644 --- a/AddonComm.lua +++ b/AddonComm.lua @@ -19,10 +19,7 @@ local C = Command -local function L(k) - return C.LocaleManager:GetActive()[k] -end - +local L = C.LocaleManager local GT = C.GroupTools local CES = C.Extensions.String local CET = C.Extensions.Table diff --git a/ChatManager.lua b/ChatManager.lua index faeb7bc..a631d0b 100644 --- a/ChatManager.lua +++ b/ChatManager.lua @@ -181,7 +181,7 @@ function CM:HandleMessage(msg, sender, channel, target, sourceChannel, isBN, pID local cmd = self:ParseCommand(args[1]) if not CCM:HasCommand(cmd) then return end if not AC:IsController(sourceChannel) then - C.Logger:Normal(L:GetActive()["CHAT_HANDLE_NOTCONTROLLER"]:format(sourceChannel:lower())) + C.Logger:Normal(L("CHAT_HANDLE_NOTCONTROLLER"):format(sourceChannel:lower())) return end local t = {} @@ -191,7 +191,6 @@ function CM:HandleMessage(msg, sender, channel, target, sourceChannel, isBN, pID end end local player = PM:GetOrCreatePlayer(sender) - --local result, err = CCM:HandleCommand(cmd, t, true, player) local result, arg, errArg = CCM:HandleCommand(cmd, t, sourceChannel, player) if isBN then target = pID @@ -207,7 +206,7 @@ function CM:HandleMessage(msg, sender, channel, target, sourceChannel, isBN, pID if type(result) == "table" then for _,v in ipairs(result) do if type(v) == "table" then - local s = v[1] + local s = l[v[1]] if type(v[2]) == "table" then s = s:format(unpack(v[2])) end diff --git a/Command.lua b/Command.lua index 04992a1..f89a81a 100644 --- a/Command.lua +++ b/Command.lua @@ -44,7 +44,6 @@ Command = { local C = Command local L -local GetL local Cmd local CM local PM @@ -66,8 +65,7 @@ function C:Init() AC = self.AddonComm log = self.Logger self:LoadSavedVars() - GetL = function(k) return L:GetActive()[k] end - log:Normal(GetL("ADDON_LOAD")) + log:Normal(L("ADDON_LOAD")) self.Loaded = true end @@ -79,7 +77,7 @@ function C:LoadSavedVars() _G["COMMAND"] = {} elseif type(_G["COMMAND"]["VERSION"]) == "number" then if _G["COMMAND"]["VERSION"] < self.VarVersion then - log:Normal(GetL("SVARS_OUTDATED")) + log:Normal(L("SVARS_OUTDATED")) wipe(_G["COMMAND"]) _G["COMMAND"] = {} end @@ -115,7 +113,7 @@ function C:CheckVersion(ver) if self.VersionChecked then return end ver = ver or 0 if ver > self.VersionNum then - log:Normal(GetL("NEWVERSION_NOTICE"):format(self.Name)) + log:Normal(L("NEWVERSION_NOTICE"):format(self.Name)) self.VersionChecked = true end end diff --git a/CommandManager.lua b/CommandManager.lua index 26af309..8649d3b 100644 --- a/CommandManager.lua +++ b/CommandManager.lua @@ -135,7 +135,7 @@ end -- @return Error message if not successful, otherwise nil. -- function CM:HandleCommand(command, args, isChat, player) - command = command:lower() + command = tostring(command):lower() local cmd = self:GetCommand(command) if cmd then if isChat then @@ -747,7 +747,6 @@ SlashCmdList[C.Name:upper()] = function(msg, editBox) table.insert(t, args[i]) end end - --local result, err = CM:HandleCommand(cmd, t, false, PM:GetOrCreatePlayer(UnitName("player"))) local result, arg, errArg = CM:HandleCommand(cmd, t, false, PM:GetOrCreatePlayer(UnitName("player"))) local l = L:GetActive() if result then @@ -775,17 +774,4 @@ SlashCmdList[C.Name:upper()] = function(msg, editBox) else C.Logger:Error(tostring(err)) end - --[[ PRE-Locale code - if result then - if type(result) == "table" then - for _,v in ipairs(result) do - C.Logger:Normal(tostring(v)) - end - else - C.Logger:Normal(tostring(result)) - end - else - C.Logger:Error(tostring(err)) - end - -- END PRE-Locale code ]] end diff --git a/EventHandler.lua b/EventHandler.lua index c88e81e..a28c2e9 100644 --- a/EventHandler.lua +++ b/EventHandler.lua @@ -18,7 +18,6 @@ --]] local C = Command -local L = C.LocaleManager local CES = C.Extensions.String --- Handles events. diff --git a/Events.lua b/Events.lua index 60cc013..4ae0f1b 100644 --- a/Events.lua +++ b/Events.lua @@ -19,7 +19,7 @@ local C = Command -local L = function(k) return C.LocaleManager:GetActive()[k] end +local L = C.LocaleManager local CM = C.ChatManager local QM = C.QueueManager local AC = C.AddonComm diff --git a/LocaleManager.lua b/LocaleManager.lua index ee0aff6..8be3937 100644 --- a/LocaleManager.lua +++ b/LocaleManager.lua @@ -31,16 +31,31 @@ C.LocaleManager = { local LM = C.LocaleManager -local function l_index(t, k) -- Wait with metatable stuff til we know everything else works properly :P - local master = LM:GetMaster()[k] - if master then return master end - return ("%%%s%%"):format(k) +local function l_index(self, k) + k = tostring(k):upper() + master = LM:GetMaster() + if self == master then -- Prevent recursion + return ("%%%s%%"):format(k) + end + local val = master[k] + if val then return val end end +local s_meta = { + __call = function(self, arg1, arg2, isPlr) + if not arg1 then return nil end + if arg2 then -- (locale, key) + return self:GetLocale(tostring(arg1), isPlr)[tostring(arg2):upper()] + end + arg1 = tostring(arg1):upper() + return self:GetActive()[arg1] + end +} + -- Initialize LocaleManager function LM:Init() if self.Active == "enGB" then self.Active = "enUS" end - --setmetatable(self.Locales, {__index = function(t, k) error("FATAL: __index meta LocaleManager.Locales report to addon author.") end}) + setmetatable(self, s_meta) self:LoadSavedVars() end @@ -72,7 +87,7 @@ function LM:Register(locale, localeTable) self.Locales[locale][k] = v end end - --setmetatable(self.Locales[locale], {__index = l_index}) + setmetatable(self.Locales[locale], {__index = l_index}) end -- Check if a locale has been loaded/registered diff --git a/Logger.lua b/Logger.lua index f2647f4..ba14fe2 100644 --- a/Logger.lua +++ b/Logger.lua @@ -1 +1 @@ ---[[ * Copyright (c) 2011-2012 by Adam Hellberg. * * This file is part of Command. * * Command is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Command is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Command. If not, see . --]] local C = Command --- Table containing all Logger methods. -- This is referenced "Logger" in Logger.lua. -- @name Command.Logger -- @class table -- @field Level Table containing all logger levels. -- @field Settings Table containing all settings specific to Logger. -- C.Logger = { Level = { Debug = 0, Normal = 1, Warning = 2, Error = 3 }, Settings = { Debug = false, Format = "%s%s: %s", } } local Logger = C.Logger local L = function(k) return C.LocaleManager:GetActive()[k] end ------------------------ -- MAIN LOGGER MODULE -- ------------------------ --- Print a log message at the specified level. -- @param msg Message to pring. -- @param level One of the levels defined in Logger.Level. -- function Logger:Print(msg, level) local prefix if level == self.Level.Debug then if not self.Settings.Debug then return end prefix = L("LOGGER_PREFIX_DEBUG") elseif level == self.Level.Normal then prefix = L("LOGGER_PREFIX_NORMAL") elseif level == self.Level.Warning then prefix = L("LOGGER_PREFIX_WARNING") elseif level == self.Level.Error then prefix = L("LOGGER_PREFIX_ERROR") else error(L("LOGGER_ERR_UNDEFINED"):format(tostring(level))) return end DEFAULT_CHAT_FRAME:AddMessage(self.Settings.Format:format(L("LOGGER_PREFIX_MAIN"):format(C.Name), prefix, msg)) end --- Print a debug message. -- @param msg Message to print. -- function Logger:Debug(msg) self:Print(msg, self.Level.Debug) end --- Print a normal message -- @param msg Message to print. -- function Logger:Normal(msg) self:Print(msg, self.Level.Normal) end --- Print a warning message. -- @param msg Message to pring. -- function Logger:Warning(msg) self:Print(msg, self.Level.Warning) end --- Print an error message. -- @param msg Message to print. -- function Logger:Error(msg) self:Print(msg, self.Level.Error) end --- Control the debug state. -- Setting debugging to enabled will enable debug messages to be printed. -- @param enabled Boolean indicating enabled or disabled state. -- function Logger:SetDebug(enabled) self.Settings.Debug = enabled end --- Enable debugging. -- function Logger:EnableDebug() self:SetDebug(true) end --- Disable debugging. -- function Logger:DisableDebug() self:SetDebug(false) end --- Toggle debugging. -- function Logger:ToggleDebug() self:SetDebug(not self.Settings.Debug) end \ No newline at end of file +--[[ * Copyright (c) 2011-2012 by Adam Hellberg. * * This file is part of Command. * * Command is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Command is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Command. If not, see . --]] local C = Command --- Table containing all Logger methods. -- This is referenced "Logger" in Logger.lua. -- @name Command.Logger -- @class table -- @field Level Table containing all logger levels. -- @field Settings Table containing all settings specific to Logger. -- C.Logger = { Level = { Debug = 0, Normal = 1, Warning = 2, Error = 3 }, Settings = { Debug = false, Format = "%s%s: %s", } } local Logger = C.Logger local L = C.LocaleManager ------------------------ -- MAIN LOGGER MODULE -- ------------------------ --- Print a log message at the specified level. -- @param msg Message to pring. -- @param level One of the levels defined in Logger.Level. -- function Logger:Print(msg, level) local prefix if level == self.Level.Debug then if not self.Settings.Debug then return end prefix = L("LOGGER_PREFIX_DEBUG") elseif level == self.Level.Normal then prefix = L("LOGGER_PREFIX_NORMAL") elseif level == self.Level.Warning then prefix = L("LOGGER_PREFIX_WARNING") elseif level == self.Level.Error then prefix = L("LOGGER_PREFIX_ERROR") else error(L("LOGGER_ERR_UNDEFINED"):format(tostring(level))) return end DEFAULT_CHAT_FRAME:AddMessage(self.Settings.Format:format(L("LOGGER_PREFIX_MAIN"):format(C.Name), prefix, msg)) end --- Print a debug message. -- @param msg Message to print. -- function Logger:Debug(msg) self:Print(msg, self.Level.Debug) end --- Print a normal message -- @param msg Message to print. -- function Logger:Normal(msg) self:Print(msg, self.Level.Normal) end --- Print a warning message. -- @param msg Message to pring. -- function Logger:Warning(msg) self:Print(msg, self.Level.Warning) end --- Print an error message. -- @param msg Message to print. -- function Logger:Error(msg) self:Print(msg, self.Level.Error) end --- Control the debug state. -- Setting debugging to enabled will enable debug messages to be printed. -- @param enabled Boolean indicating enabled or disabled state. -- function Logger:SetDebug(enabled) self.Settings.Debug = enabled end --- Enable debugging. -- function Logger:EnableDebug() self:SetDebug(true) end --- Disable debugging. -- function Logger:DisableDebug() self:SetDebug(false) end --- Toggle debugging. -- function Logger:ToggleDebug() self:SetDebug(not self.Settings.Debug) end \ No newline at end of file diff --git a/LootManager.lua b/LootManager.lua index 1404b8b..29ccedd 100644 --- a/LootManager.lua +++ b/LootManager.lua @@ -27,7 +27,7 @@ local C = Command C.LootManager = { } -local L = function(k) return C.LocaleManager:GetActive()[k] end +local L = C.LocaleManager local LM = C.LootManager local GT = C.GroupTools diff --git a/PlayerManager.lua b/PlayerManager.lua index d72b1b6..ea405ac 100644 --- a/PlayerManager.lua +++ b/PlayerManager.lua @@ -22,7 +22,6 @@ local MODE_WHITELIST = 1 local C = Command local L = C.LocaleManager -local GetL = function(k) return L:GetActive()[k] end local CM local GT = C.GroupTools local BNT = C.BattleNetTools @@ -107,34 +106,34 @@ local function Kick(name, sender, reason) if type(reason) == "string" then local msg if CM.LastChannel == "WHISPER" or CM.LastChannel == "BNET" then - msg = L:GetLocale(PM:GetOrCreatePlayer(sender).Settings.Locale, true)["PM_KICK_REASON"]:format(name, sender, reason) + msg = L(PM:GetOrCreatePlayer(sender).Settings.Locale, "PM_KICK_REASON", true):format(name, sender, reason) else - msg = GetL("PM_KICK_REASON"):format(name, sender, reason) + msg = L("PM_KICK_REASON"):format(name, sender, reason) end CM:SendMessage(msg, CM.LastChannel, CM.LastTarget) else local msg if CM.LastChannel == "WHISPER" or CM.LastChannel == "BNET" then - msg = L:GetLocale(PM:GetOrCreatePlayer(sender).Settings.Locale, true)["PM_KICK"]:format(name, sender) + msg = L(PM:GetOrCreatePlayer(sender).Settings.Locale, "PM_KICK", true):format(name, sender) else - msg = GetL("PM_KICK"):format(name, sender) + msg = L("PM_KICK"):format(name, sender) end CM:SendMessage(msg, CM.LastChannel, CM.LastTarget) end else - local msg = L:GetLocale(PM:GetOrCreatePlayer(sender).Settings.Locale, true)["PM_KICK_NOTIFY"]:format(name) + local msg = L(PM:GetOrCreatePlayer(sender).Settings.Locale, "PM_KICK_NOTIFY", true):format(name) CM:SendMessage(msg, "WHISPER", sender) end - local msg = L:GetLocale(PM:GetOrCreatePlayer(name).Settings.Locale, true)["PM_KICK_TARGET"]:format(sender) + local msg = L(PM:GetOrCreatePlayer(name).Settings.Locale, "PM_KICK_TARGET", true):format(sender) CM:SendMessage(msg, "WHISPER", name) end local function KickCancelled(name, sender) local msg if CM.LastTarget and (CM.LastChannel == "WHISPER" or CM.LastChannel == "BNET") then - msg = L:GetLocale(PM:GetOrCreatePlayer(CM.LastTarget).Settings.Locale, true)["PM_KICK_DENIED"]:format(sender, name) + msg = L(PM:GetOrCreatePlayer(CM.LastTarget).Settings.Locale, "PM_KICK_DENIED", true):format(sender, name) else - msg = GetL("PM_KICK_DENIED"):format(sender, name) + msg = L("PM_KICK_DENIED"):format(sender, name) end CM:SendMessage(msg, CM.LastChannel, CM.LastTarget) end @@ -224,7 +223,7 @@ function PM:GetOrCreatePlayer(name) player.Info.Group = self.Access.Groups.User.Name end Players[player.Info.Name] = player - log:Normal(GetL("PM_PLAYER_CREATE"):format(player.Info.Name)) + log:Normal(L("PM_PLAYER_CREATE"):format(player.Info.Name)) return player end end @@ -234,7 +233,7 @@ end -- function PM:UpdatePlayer(player) Players[player.Info.Name] = player - log:Normal(GetL("PM_PLAYER_UPDATE"):format(player.Info.Name)) + log:Normal(L("PM_PLAYER_UPDATE"):format(player.Info.Name)) end --- Completely remove a command from a group's access list. @@ -564,7 +563,7 @@ function PM:Invite(player, sender) return "PM_INVITE_NOTIFYTARGET" elseif player.Settings.Invite then InviteUnit(player.Info.Name) - local msg = L:GetLocale(player.Settings.Locale, true)["PM_INVITE_NOTIFY"]:format(sender.Info.Name, player.Info.Name) + local msg = L(player.Settings.Locale, "PM_INVITE_NOTIFY", true):format(sender.Info.Name, player.Info.Name) CM:SendMessage(msg, "WHISPER", player.Info.Name) return "PM_INVITE_SUCCESS", {player.Info.Name} else @@ -586,7 +585,7 @@ function PM:DenyInvites(player, isWhisper) if isWhisper then return "PM_DI_BLOCKING" end - local msg = L:GetLocale(player.Settings.Locale, true)["PM_DI_BLOCKING"] + local msg = L(player.Settings.Locale, "PM_DI_BLOCKING", true) CM:SendMessage(msg, "WHISPER", player.Info.Name) return "PM_DI_SUCCESS", {player.Info.Name} end @@ -607,7 +606,7 @@ function PM:AllowInvites(player, isWhisper) if isWhisper then return "PM_AI_ALLOWING" end - local msg = L:GetLocale(player.Settings.Locale, true)["PM_AI_ALLOWING"] + local msg = L(player.Settings.Locale, "PM_AI_ALLOWING", true) CM:SendMessage(msg, "WHISPER", player.Info.Name) return "PM_AI_SUCCESS", {player.Info.Name} end @@ -629,10 +628,10 @@ function PM:Kick(player, sender, reason) if GT:IsGroupLeader() or GT:IsRaidLeaderOrAssistant() then KickName = player.Info.Name KickSender = sender.Info.Name - KickReason = reason or GetL("PM_KICK_DEFAULTREASON"):format(KickSender) - StaticPopupDialogs.COMMAND_CONFIRMKICK.text = GetL("PM_KICK_POPUP") - StaticPopupDialogs.COMMAND_CONFIRMKICK.button1 = GetL("YES") - StaticPopupDialogs.COMMAND_CONFIRMKICK.button2 = GetL("NO") + KickReason = reason or L("PM_KICK_DEFAULTREASON"):format(KickSender) + StaticPopupDialogs.COMMAND_CONFIRMKICK.text = L("PM_KICK_POPUP") + StaticPopupDialogs.COMMAND_CONFIRMKICK.button1 = L("YES") + StaticPopupDialogs.COMMAND_CONFIRMKICK.button2 = L("NO") StaticPopup_Show("COMMAND_CONFIRMKICK", KickSender, KickName) return "PM_KICK_WAIT", {KickName} end diff --git a/QueueManager.lua b/QueueManager.lua index 73e849b..0ba3fd5 100644 --- a/QueueManager.lua +++ b/QueueManager.lua @@ -38,7 +38,7 @@ C.QueueManager = { Announced = false } -local L = function(k) return C.LocaleManager:GetActive()[k] end +local L = C.LocaleManager local QM = C.QueueManager --- Contains information about various dungeon types. diff --git a/RollManager.lua b/RollManager.lua index f69b0ef..3b58be5 100644 --- a/RollManager.lua +++ b/RollManager.lua @@ -18,7 +18,7 @@ --]] local C = Command -local L = function(k) return C.LocaleManager:GetActive()[k] end +local L = C.LocaleManager local GT = C.GroupTools local CM local CES = C.Extensions.String -- 1.7.9.5