zombiesurvival-evolved/gamemodes/zombiesurvival/gamemode/sh_translate.lua

105 lines
2.7 KiB
Lua
Raw Normal View History

2014-10-02 08:49:54 +08:00
-- Translation library by William Moodhe
-- Feel free to use this in your own addons.
-- See the languages folder to add your own languages.
translate = {}
local Languages = {}
local Translations = {}
local AddingLanguage
local DefaultLanguage = "en"
local CurrentLanguage = DefaultLanguage
if CLIENT then
-- Need to make a new convar since gmod_language isn't sent to server.
CreateClientConVar("gmod_language_rep", "en", false, true)
timer.Create("checklanguagechange", 1, 0, function()
CurrentLanguage = GetConVarString("gmod_language")
if CurrentLanguage ~= GetConVarString("gmod_language_rep") then
-- Let server know our language changed.
RunConsoleCommand("gmod_language_rep", CurrentLanguage)
end
end)
end
function translate.GetLanguages()
return Languages
end
function translate.GetLanguageName(short)
return Languages[short]
end
function translate.GetTranslations(short)
return Translations[short] or Translations[DefaultLanguage]
end
function translate.AddLanguage(short, long)
Languages[short] = long
Translations[short] = Translations[short] or {}
AddingLanguage = short
end
function translate.AddTranslation(id, text)
if not AddingLanguage or not Translations[AddingLanguage] then return end
Translations[AddingLanguage][id] = text
end
function translate.Get(id)
return translate.GetTranslations(CurrentLanguage)[id] or translate.GetTranslations(DefaultLanguage)[id] or ("@"..id.."@")
end
function translate.Format(id, ...)
return string.format(translate.Get(id), ...)
end
if SERVER then
function translate.ClientGet(pl, ...)
CurrentLanguage = pl:GetInfo("gmod_language_rep")
return translate.Get(...)
end
function translate.ClientFormat(pl, ...)
CurrentLanguage = pl:GetInfo("gmod_language_rep")
return translate.Format(...)
end
function PrintTranslatedMessage(printtype, str, ...)
for _, pl in pairs(player.GetAll()) do
pl:PrintMessage(printtype, translate.ClientFormat(pl, str, ...))
end
end
end
if CLIENT then
function translate.ClientGet(_, ...)
return translate.Get(...)
end
function translate.ClientFormat(_, ...)
return translate.Format(...)
end
end
for i, filename in pairs(file.Find(GM.FolderName.."/gamemode/languages/*.lua", "LUA")) do
LANGUAGE = {}
AddCSLuaFile("languages/"..filename)
include("languages/"..filename)
for k, v in pairs(LANGUAGE) do
translate.AddTranslation(k, v)
end
LANGUAGE = nil
end
local meta = FindMetaTable("Player")
if not meta then return end
function meta:PrintTranslatedMessage(hudprinttype, translateid, ...)
if ... ~= nil then
self:PrintMessage(hudprinttype, translate.ClientFormat(self, translateid, ...))
else
self:PrintMessage(hudprinttype, translate.ClientGet(self, translateid))
end
end