Initial commit
This commit is contained in:
127
gamemodes/darkrp/gamemode/modules/language/sh_language.lua
Normal file
127
gamemodes/darkrp/gamemode/modules/language/sh_language.lua
Normal file
@@ -0,0 +1,127 @@
|
||||
local rp_languages = {}
|
||||
local selectedLanguage = GetConVar("gmod_language"):GetString() -- Switch language by setting gmod_language to another language
|
||||
|
||||
cvars.AddChangeCallback("gmod_language", function(cv, old, new)
|
||||
selectedLanguage = new
|
||||
end)
|
||||
|
||||
-- Some server owners experience that the language is not set correctly on
|
||||
-- startup. This provides a failsafe in case that happens.
|
||||
timer.Simple(0, function()
|
||||
local gmodLanguage = GetConVar("gmod_language"):GetString()
|
||||
if gmodLanguage ~= "" and selectedLanguage ~= gmodLanguage then
|
||||
selectedLanguage = gmodLanguage
|
||||
end
|
||||
end)
|
||||
|
||||
function DarkRP.addLanguage(name, tbl)
|
||||
local old = rp_languages[name] or {}
|
||||
rp_languages[name] = tbl
|
||||
|
||||
-- Merge the language with the translations added by DarkRP.addPhrase
|
||||
for k, v in pairs(old) do
|
||||
if rp_languages[name][k] then continue end
|
||||
rp_languages[name][k] = v
|
||||
end
|
||||
LANGUAGE = rp_languages[name] -- backwards compatibility
|
||||
end
|
||||
|
||||
function DarkRP.addPhrase(lang, name, phrase)
|
||||
rp_languages[lang] = rp_languages[lang] or {}
|
||||
rp_languages[lang][name] = phrase
|
||||
end
|
||||
|
||||
function DarkRP.getPhrase(name, ...)
|
||||
local langTable = rp_languages[selectedLanguage] or rp_languages.en
|
||||
|
||||
return (langTable[name] or rp_languages.en[name]) and string.format(langTable[name] or rp_languages.en[name], ...) or nil
|
||||
end
|
||||
|
||||
function DarkRP.getPhraseLocalized(ply, name, ...)
|
||||
local lang = ply:GetInfo("gmod_language") or selectedLanguage
|
||||
local langTable = rp_languages[lang] or rp_languages.en
|
||||
|
||||
return (langTable[name] or rp_languages.en[name]) and string.format(langTable[name] or rp_languages.en[name], ...) or nil
|
||||
end
|
||||
|
||||
function DarkRP.getMissingPhrases(lang)
|
||||
lang = lang or selectedLanguage
|
||||
local res = {}
|
||||
local format = "%s = \"%s\","
|
||||
|
||||
for k, v in pairs(rp_languages.en) do
|
||||
if rp_languages[lang][k] then continue end
|
||||
table.insert(res, string.format(format, k, v))
|
||||
end
|
||||
|
||||
return table.IsEmpty(res) and "No language strings missing!" or table.concat(res, "\n")
|
||||
end
|
||||
|
||||
local function getMissingPhrases(ply, cmd, args)
|
||||
if not args[1] then print("Please run the command with a language code e.g. darkrp_getphrases \"en\"") return end
|
||||
local lang = rp_languages[args[1]]
|
||||
if not lang then print("This language does not exist! Make sure the casing is right.")
|
||||
print("Available languages:")
|
||||
for k in pairs(rp_languages) do print(k) end
|
||||
return
|
||||
end
|
||||
|
||||
print(DarkRP.getMissingPhrases(args[1]))
|
||||
end
|
||||
if CLIENT then concommand.Add("darkrp_getphrases", getMissingPhrases) end
|
||||
|
||||
--[[---------------------------------------------------------------------------
|
||||
Chat command translating
|
||||
---------------------------------------------------------------------------]]
|
||||
local chatCmdDescriptions = {}
|
||||
function DarkRP.addChatCommandsLanguage(lang, tbl)
|
||||
chatCmdDescriptions[lang] = chatCmdDescriptions[lang] or {}
|
||||
|
||||
table.Merge(chatCmdDescriptions[lang], tbl)
|
||||
end
|
||||
|
||||
function DarkRP.getChatCommandDescription(name)
|
||||
local cmd = DarkRP.getChatCommand(name)
|
||||
return chatCmdDescriptions[selectedLanguage] and chatCmdDescriptions[selectedLanguage][name] or
|
||||
cmd and cmd.description or
|
||||
nil
|
||||
end
|
||||
|
||||
local function getMissingCmdTranslations()
|
||||
local cmds = DarkRP.getSortedChatCommands()
|
||||
|
||||
-- No commands have been translated
|
||||
if not chatCmdDescriptions[selectedLanguage] then return cmds end
|
||||
|
||||
-- Remove translated commands and maintain keys
|
||||
local count = #cmds
|
||||
for i = 1, count do
|
||||
if chatCmdDescriptions[selectedLanguage][cmds[i].command] then
|
||||
cmds[i] = nil
|
||||
end
|
||||
end
|
||||
|
||||
cmds = table.ClearKeys(cmds)
|
||||
|
||||
return cmds
|
||||
end
|
||||
|
||||
local function printMissingChatTranslations()
|
||||
local cmds = getMissingCmdTranslations()
|
||||
local text = {}
|
||||
|
||||
local maxCmdLength = 0
|
||||
for _, v in ipairs(cmds) do maxCmdLength = math.Max(maxCmdLength, string.len(v.command)) end
|
||||
|
||||
for k, v in ipairs(cmds) do
|
||||
text[k] = string.format([=[["%s"]%s= "%s",]=], v.command, string.rep(' ', 4 + maxCmdLength - string.len(v.command)), v.description)
|
||||
end
|
||||
|
||||
MsgC(Color(0, 255, 0), string.format("%s untranslated chat command descriptions!\n", #cmds))
|
||||
|
||||
text = table.concat(text, "\n ")
|
||||
SetClipboardText(text)
|
||||
|
||||
MsgC(Color(0, 255, 0), "text copied to clipboard!\n")
|
||||
end
|
||||
if CLIENT then concommand.Add("darkrp_translateChatCommands", printMissingChatTranslations) end
|
||||
Reference in New Issue
Block a user