From e63900f36a0b8f16fcccc44788bac161f6a1858f Mon Sep 17 00:00:00 2001 From: F16Gaming Date: Fri, 30 Mar 2012 22:06:50 +0200 Subject: [PATCH] Implemented localization. --- AddonComm.lua | 32 ++-- BattleNetTools.lua | 4 +- ChatManager.lua | 51 +++++- Command.lua | 35 ++-- CommandManager.lua | 333 ++++++++++++++++++++++---------------- EventHandler.lua | 6 +- Events.lua | 14 +- Events_Chat.lua | 4 +- GroupTools.lua | 15 +- LocaleLoader.xml | 25 +++ LocaleManager.lua | 143 +++++++++++++++++ Logger.lua | 2 +- LootManager.lua | 80 ++++++---- PlayerManager.lua | 264 ++++++++++++++++++------------- QueueManager.lua | 21 +-- RollManager.lua | 109 ++++++------- String.lua | 4 +- Table.lua | 4 +- load.xml | 5 +- locales/enUS.lua | 446 +++++++++++++++++++++++++++++++++++++++++++++++++++ locales/svSE.lua | 448 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 21 files changed, 1632 insertions(+), 413 deletions(-) create mode 100644 LocaleLoader.xml create mode 100644 LocaleManager.lua create mode 100644 locales/enUS.lua create mode 100644 locales/svSE.lua diff --git a/AddonComm.lua b/AddonComm.lua index 21575f8..f7477e9 100644 --- a/AddonComm.lua +++ b/AddonComm.lua @@ -1,5 +1,5 @@ ---[[ - * Copyright (c) 2011 by Adam Hellberg. +--[[ + * Copyright (c) 2011-2012 by Adam Hellberg. * * This file is part of Command. * @@ -19,6 +19,10 @@ local C = Command +local function L(k) + return C.LocaleManager:GetActive()[k] +end + local GT = C.GroupTools local CES = C.Extensions.String local CET = C.Extensions.Table @@ -65,7 +69,7 @@ local function GroupTimerUpdate(frame, elapsed) frame.Time = 0 AC.GroupRunning = false frame:SetScript("OnUpdate", nil) - log:Normal("No response from group, running updater...") + log:Normal(L("AC_GROUP_NORESP")) AC:UpdateGroup() end end @@ -76,7 +80,7 @@ local function GuildTimerUpdate(frame, elapsed) frame.Time = 0 AC.GuildRunning = false frame:SetScript("OnUpdate", nil) - log:Normal("No response from guild, running updater...") + log:Normal(L("AC_GUILD_NORESP")) AC:UpdateGuild() end end @@ -85,8 +89,8 @@ function AC:Init() --self:LoadSavedVars() for _,v in pairs(self.Type) do if not RegisterAddonMessagePrefix(v) then - log:Error(("[FATAL] Failed to register Addon prefix %q. Maximum number of prefixes reached on client."):format(tostring(v))) - error(("[FATAL] Failed to register Addon prefix %q. Maximum number of prefixes reached on client."):format(tostring(v))) + log:Error(L("AC_ERR_PREFIX"):format(tostring(v))) + error(L("AC_ERR_PREFIX"):format(tostring(v))) end end end @@ -115,7 +119,7 @@ function AC:Receive(msgType, msg, channel, sender) table.insert(self.GroupMembers, v) end end - log:Debug("Updated group members, controller: " .. self.GroupMembers[1]) + log:Debug(L("AC_GROUP_R_UPDATE"):format(self.GroupMembers[1])) self:UpdateGroup() elseif msgType == self.Type.GroupAdd then if channel ~= "WHISPER" or not GT:IsGroup() then return end @@ -142,7 +146,7 @@ function AC:Receive(msgType, msg, channel, sender) table.insert(self.GuildMembers, v) end end - log:Debug("Updated guild members, controller: " .. self.GuildMembers[1]) + log:Debug(L("AC_GUILD_R_UPDATE"):format(self.GuildMembers[1])) self:UpdateGuild() elseif msgType == self.Type.GuildAdd then if channel ~= "WHISPER" then return end @@ -165,7 +169,7 @@ function AC:Send(msgType, msg, channel, target) channel = "PARTY" end if not CET:HasValue(self.Type, msgType) then - error("Invalid Message Type specified: " .. tostring(msgType)) + error(L("AC_ERR_MSGTYPE"):format(tostring(msgType))) return end SendAddonMessage(msgType, msg, channel, target) @@ -177,7 +181,7 @@ end function AC:UpdateGroup() if not GT:IsGroup() then if self.InGroup then - log:Normal("Left group, resetting group variables...") + log:Normal(L("AC_GROUP_LEFT")) end self.InGroup = false self.GroupChecked = false @@ -189,7 +193,7 @@ function AC:UpdateGroup() if not self.GroupChecked and not GT:IsGroupLeader() then self.GroupChecked = true self.GroupRunning = true - log:Normal("Waiting for group response...") + log:Normal(L("AC_GROUP_WAIT")) GroupTimer:SetScript("OnUpdate", GroupTimerUpdate) self:Send(self.Type.GroupRequest, UnitName("player"), "RAID") return @@ -228,7 +232,7 @@ function AC:UpdateGuild() if not self.GuildChecked then self.GuildChecked = true self.GuildRunning = true - log:Normal("Waiting for guild response...") + log:Normal(L("AC_GUILD_WAIT")) GuildTimer:SetScript("OnUpdate", GuildTimerUpdate) return end @@ -268,7 +272,7 @@ end function AC:CheckGroupRoster() for i,v in ipairs(self.GroupMembers) do if not GT:IsInGroup(v) then - log:Normal("Detected that " .. v .. " is no longer in the group, removing and updating group members...") + log:Normal(L("AC_GROUP_REMOVE"):format(v)) table.remove(self.GroupMembers, i) if self.GroupMembers[1] == UnitName("player") then self.GroupMaster = true @@ -298,7 +302,7 @@ function AC:SyncGroup() if GT:IsInGroup() and GT:IsGroupLeader() then if self.GroupMembers[1] ~= UnitName("player") or not self.GroupMaster then -- Sync handler table - log:Normal("Detected group handlers out of date! Sending sync message...") + log:Normal(L("AC_GROUP_SYNC")) wipe(self.GroupMembers) self.GroupMembers[1] = UnitName("player") self.GroupMaster = true diff --git a/BattleNetTools.lua b/BattleNetTools.lua index d3a0301..cf0d6d2 100644 --- a/BattleNetTools.lua +++ b/BattleNetTools.lua @@ -1,5 +1,5 @@ ---[[ - * Copyright (c) 2011 by Adam Hellberg. +--[[ + * Copyright (c) 2011-2012 by Adam Hellberg. * * This file is part of Command. * diff --git a/ChatManager.lua b/ChatManager.lua index 3fc83dd..faeb7bc 100644 --- a/ChatManager.lua +++ b/ChatManager.lua @@ -1,5 +1,5 @@ ---[[ - * Copyright (c) 2011 by Adam Hellberg. +--[[ + * Copyright (c) 2011-2012 by Adam Hellberg. * * This file is part of Command. * @@ -55,6 +55,7 @@ C.ChatManager = { local CM = C.ChatManager local PM = C.PlayerManager +local L = C.LocaleManager local GT = C.GroupTools local AC = C.AddonComm local CCM = C.CommandManager @@ -153,11 +154,11 @@ end function CM:SetCmdChar(char) if type(char) ~= "string" then - return false, "Command char has to be of type string." + return false, "CHAT_ERR_CMDCHAR" end char = char:lower() --:sub(1, 1) self.Settings.CMD_CHAR = char - return "Successfully set the command char to: " .. char + return "CHAT_CMDCHAR_SUCCESS", {char} end --- Handle a chat message. @@ -180,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("Not controller instance for \124cff00FFFF" .. sourceChannel:lower() .. "\124r, aborting.") + C.Logger:Normal(L:GetActive()["CHAT_HANDLE_NOTCONTROLLER"]:format(sourceChannel:lower())) return end local t = {} @@ -190,11 +191,48 @@ 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, err = CCM:HandleCommand(cmd, t, true, player) + local result, arg, errArg = CCM:HandleCommand(cmd, t, sourceChannel, player) if isBN then target = pID sender = pID end + local l + if (channel == "WHISPER" or channel == "BNET") or not result then + l = L:GetLocale(player.Settings.Locale, true) + else + l = L:GetActive() + end + if result then + if type(result) == "table" then + for _,v in ipairs(result) do + if type(v) == "table" then + local s = v[1] + if type(v[2]) == "table" then + s = s:format(unpack(v[2])) + end + self:SendMessage(s, channel, target, isBN) + end + end + elseif result == "RAW_TABLE_OUTPUT" then + for _,v in ipairs(arg) do + self:SendMessage(tostring(v), channel, target, isBN) + end + else + local s = l[result] + if type(arg) == "table" then + s = s:format(unpack(arg)) + end + self:SendMessage(s, channel, target, isBN) + end + else + local s = l[arg] + if type(errArg) == "table" then + s = s:format(unpack(errArg)) + end + self:SendMessage(s, "WHISPER", sender, isBN) + end + --[[ PRE-Locale stuff if result then if type(result) == "table" then for _,v in ipairs(result) do @@ -206,4 +244,5 @@ function CM:HandleMessage(msg, sender, channel, target, sourceChannel, isBN, pID else self:SendMessage(tostring(err), "WHISPER", sender, isBN) end + -- END PRE-Locale stuff ]] end diff --git a/Command.lua b/Command.lua index 7900732..04992a1 100644 --- a/Command.lua +++ b/Command.lua @@ -1,5 +1,5 @@ ---[[ - * Copyright (c) 2011 by Adam Hellberg. +--[[ + * Copyright (c) 2011-2012 by Adam Hellberg. * * This file is part of Command. * @@ -43,6 +43,8 @@ Command = { } local C = Command +local L +local GetL local Cmd local CM local PM @@ -56,6 +58,7 @@ function C:Init() if self.Version == "@" .. "project-version" .. "@" then self.Version = "Dev" end + L = self.LocaleManager Cmd = self.CommandManager CM = self.ChatManager PM = self.PlayerManager @@ -63,7 +66,8 @@ function C:Init() AC = self.AddonComm log = self.Logger self:LoadSavedVars() - log:Normal("AddOn loaded! Use /cmd help or !help for help. !!NYI!!") + GetL = function(k) return L:GetActive()[k] end + log:Normal(GetL("ADDON_LOAD")) self.Loaded = true end @@ -75,7 +79,7 @@ function C:LoadSavedVars() _G["COMMAND"] = {} elseif type(_G["COMMAND"]["VERSION"]) == "number" then if _G["COMMAND"]["VERSION"] < self.VarVersion then - log:Normal("Saved Variables out of date, resetting...") + log:Normal(GetL("SVARS_OUTDATED")) wipe(_G["COMMAND"]) _G["COMMAND"] = {} end @@ -97,6 +101,7 @@ function C:LoadSavedVars() if type(self.Settings.GROUP_INVITE_ANNOUNCE_DELAY) ~= "number" then self.Settings.GROUP_INVITE_ANNOUNCE_DELAY = 0 end + L:Init() CM:Init() PM:Init() RM:Init() @@ -110,7 +115,7 @@ function C:CheckVersion(ver) if self.VersionChecked then return end ver = ver or 0 if ver > self.VersionNum then - log:Normal("\124cffFF0000A new version of \124cff00FFFF" .. self.Name .. "\124cffFF0000 is available! \124cffFFFF00Check the site you downloaded from for the updated version.") + log:Normal(GetL("NEWVERSION_NOTICE"):format(self.Name)) self.VersionChecked = true end end @@ -121,9 +126,9 @@ end function C:SetEnabled(enabled) self.Settings.ENABLED = enabled if self.Settings.ENABLED then - return "AddOn \124cff00FF00enabled\124r." + return "ENABLED" end - return "AddOn \124cffFF0000disabled\124r." + return "DISABLED" end --- Enable AddOn. @@ -151,9 +156,9 @@ function C:SetDebug(enabled) self.Settings.DEBUG = enabled log:SetDebug(enabled) if self.Settings.DEBUG then - return "Debugging \124cff00FF00enabled\124r." + return "DEBUGENABLED" end - return "Debugging \124cffFF0000disabled\124r." + return "DEBUGDISABLED" end --- Enable debugging. @@ -177,9 +182,9 @@ end function C:SetGroupInvite(enabled) self.Settings.GROUP_INVITE_ANNOUNCE = enabled if self.Settings.GROUP_INVITE_ANNOUNCE then - return "Group Invite (Announce) enabled." + return "GI_ENABLED" end - return "Group Invite (Announce) disabled." + return "GI_DISABLED" end function C:EnableGroupInvite() @@ -196,17 +201,17 @@ end function C:SetGroupInviteDelay(time) if type(time) ~= "number" then - return false, "Delay has to be a number." + return false, "GI_DELAY_NUM" end time = math.ceil(time) if time > 50 then - return false, "Delay cannot be greater than 50 seconds." + return false, "GI_DELAY_MAX" end self.Settings.GROUP_INVITE_ANNOUNCE_DELAY = time if self.Settings.GROUP_INVITE_ANNOUNCE_DELAY > 0 then - return "Group Invite (Announce) delay set to " .. self.Settings.GROUP_INVITE_ANNOUNCE_DELAY .. " seconds." + return "GI_DELAY_SET", {self.Settings.GROUP_INVITE_ANNOUNCE_DELAY} end - return "Group Invite (Announce) delay disabled." + return "GI_DELAY_DISABLED" end function C:DisableGroupInviteDelay() diff --git a/CommandManager.lua b/CommandManager.lua index e172353..6282547 100644 --- a/CommandManager.lua +++ b/CommandManager.lua @@ -1,5 +1,5 @@ ---[[ - * Copyright (c) 2011 by Adam Hellberg. +--[[ + * Copyright (c) 2011-2012 by Adam Hellberg. * * This file is part of Command. * @@ -36,6 +36,7 @@ C.CommandManager = { local CM = C.CommandManager local PM = C.PlayerManager +local L = C.LocaleManager local QM = C.QueueManager local RM = C.RollManager local LM = C.LootManager @@ -57,7 +58,7 @@ end -- @param help Message describing how the command should be used. -- function CM:Register(names, access, func, help) - help = help or "No help available." + help = help or "CM_NO_HELP" if type(names) == "string" then names = {names} end @@ -139,32 +140,33 @@ function CM:HandleCommand(command, args, isChat, player) if cmd then if isChat then if not PM:IsCommandAllowed(cmd) and player.Info.Name ~= UnitName("player") then - return false, ("%s is not allowed to be used, %s."):format(cmd.Name, player.Info.Name) + return false, "CM_ERR_NOTALLOWED", {cmd.Name, player.Info.Name} elseif not PM:HasAccess(player, cmd) then - return false, ("You do not have permission to use that command, %s. Required access level: %d. Your access level: %d."):format(player.Info.Name, cmd.Access, PM:GetAccess(player)) + return false, "CM_ERR_NOACCESS", {player.Info.Name, cmd.Access, PM:GetAccess(player)} end end return cmd.Call(args, player, isChat) else - return false, ("%q is not a registered command."):format(tostring(command)) + return false, "CM_ERR_NOTREGGED", {tostring(command)} end end --- Prints all command names together with their help messages. function CM:AutoHelp() + local l = L:GetActive() for k,v in pairs(self.Commands) do C.Logger:Normal(("/%s %s"):format(self.Slash[1], k)) - C.Logger:Normal((" - %s"):format(v.Help)) + C.Logger:Normal((" - %s"):format(l[v.Help])) end end CM:Register({"__DEFAULT__", "help", "h"}, PM.Access.Local, function(args, sender, isChat) if isChat then - return "Type !commands for a listing of commands available." + return "CM_DEFAULT_CHAT" end CM:AutoHelp() - return "End of help message." -end, "Prints this help message.") + return "CM_DEFAULT_END" +end, "CM_DEFAULT_HELP") CM:Register({"commands", "cmds", "cmdlist", "listcmds", "listcommands", "commandlist"}, PM.Access.Groups.User.Level, function(args, sender, isChat) local all @@ -172,27 +174,27 @@ CM:Register({"commands", "cmds", "cmdlist", "listcmds", "listcommands", "command all = args[1] == "all" end local cmds = CM:GetCommands(all) - return CES:Fit(cmds, 240, ", ") -- Max length is 255, "[Command] " takes up 10. This leaves us with 5 characters grace. -end, "Print all registered commands.") + return "RAW_TABLE_OUTPUT", CES:Fit(cmds, 240, ", ") -- Max length is 255, "[Command] " takes up 10. This leaves us with 5 characters grace. +end, "CM_COMMANDS_HELP") CM:Register({"version", "ver", "v"}, PM.Access.Groups.User.Level, function(args, sender, isChat) - return C.Version -end, "Print the version of Command") + --return C.Version + return "CM_VERSION", {C.Version} +end, "CM_VERSION_HELP") CM:Register({"set", "s"}, PM.Access.Groups.Admin.Level, function(args, sender, isChat) - local usage = "Usage: set cmdchar|groupinvite" if #args <= 0 then - return false, usage + return false, "CM_SET_USAGE" end args[1] = args[1]:lower() if args[1]:match("^c") then -- Command Char setting if #args < 2 then - return false, "No command character specified." + return false, "CM_ERR_NOCMDCHAR" end return Chat:SetCmdChar(args[2]) elseif args[1]:match("^g") then -- Group invite (announce) if #args < 2 then - return false, "Usage: set groupinvite enable|disable|