mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 05:43:46 +03:00
Upload
This commit is contained in:
267
lua/arccw/shared/sh_localization.lua
Normal file
267
lua/arccw/shared/sh_localization.lua
Normal file
@@ -0,0 +1,267 @@
|
||||
--[[
|
||||
| This file was obtained through the combined efforts
|
||||
| of Madbluntz & Plymouth Antiquarian Society.
|
||||
|
|
||||
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
||||
| Maloy, DrPepper10 @ RIP, Atle!
|
||||
|
|
||||
| Visit for more: https://plymouth.thetwilightzone.ru/
|
||||
--]]
|
||||
|
||||
if SERVER and game.SinglePlayer() then
|
||||
util.AddNetworkString("arccw_sp_reloadlangs")
|
||||
end
|
||||
|
||||
ArcCW.LangTable = ArcCW.LangTable or {}
|
||||
-- Converts raw string to a lang phrase. not case sensitive.
|
||||
ArcCW.StringToLang = {
|
||||
-- Class
|
||||
["pistol"] = "class.pistol",
|
||||
["revolver"] = "class.revolver",
|
||||
["machine pistol"] = "class.machinepistol",
|
||||
|
||||
["submachine gun"] = "class.smg", -- Preferred
|
||||
["sub-machine gun"] = "class.smg",
|
||||
["smg"] = "class.smg",
|
||||
|
||||
["personal defense weapon"] = "class.pdw", -- Preferred
|
||||
["pdw"] = "class.pdw",
|
||||
|
||||
["shotgun"] = "class.shotgun",
|
||||
|
||||
["assault carbine"] = "class.assaultcarbine",
|
||||
["carbine"] = "class.carbine",
|
||||
["assault rifle"] = "class.assaultrifle",
|
||||
["rifle"] = "class.rifle",
|
||||
|
||||
["battle rifle"] = "class.battlerifle",
|
||||
["designated marksman rifle"] = "class.dmr",
|
||||
["dmr"] = "class.dmr", -- Preferred
|
||||
["sniper rifle"] = "class.sniperrifle", -- Preferred
|
||||
["sniper"] = "class.sniperrifle",
|
||||
|
||||
["antimateriel rifle"] = "class.antimaterielrifle", -- Preferred
|
||||
["antimaterial rifle"] = "class.antimaterielrifle",
|
||||
["anti-material rifle"] = "class.antimaterielrifle",
|
||||
["rocket launcher"] = "class.rocketlauncher",
|
||||
|
||||
["hand grenade"] = "class.grenade", -- Preferred
|
||||
["grenade"] = "class.grenade",
|
||||
["melee weapon"] = "class.melee", -- Preferred
|
||||
|
||||
-- Attachment Slot
|
||||
["optic"] = "attslot.optic",
|
||||
["backup optic"] = "attslot.bkoptic",
|
||||
["muzzle"] = "attslot.muzzle",
|
||||
["barrel"] = "attslot.barrel",
|
||||
["choke"] = "attslot.choke",
|
||||
["underbarrel"] = "attslot.underbarrel",
|
||||
["tactical"] = "attslot.tactical",
|
||||
["grip"] = "attslot.grip",
|
||||
["stock"] = "attslot.stock",
|
||||
["fire group"] = "attslot.fcg",
|
||||
["ammo type"] = "attslot.ammo",
|
||||
["perk"] = "attslot.perk",
|
||||
["charm"] = "attslot.charm",
|
||||
["skin"] = "attslot.skin",
|
||||
["magazine"] = "attslot.magazine",
|
||||
["slide"] = "attslot.slide",
|
||||
|
||||
["iron sights"] = "attslot.optic.default",
|
||||
["ironsights"] = "attslot.optic.default",
|
||||
["standard barrel"] = "attslot.barrel.default",
|
||||
["standard choke"] = "attslot.choke.default",
|
||||
["standard muzzle"] = "attslot.muzzle.default",
|
||||
["standard grip"] = "attslot.grip.default",
|
||||
["standard stock"] = "attslot.stock.default",
|
||||
["no stock"] = "attslot.stock.none",
|
||||
["standard fcg"] = "attslot.fcg.default",
|
||||
["standard magazine"] = "attslot.magazine.default",
|
||||
}
|
||||
|
||||
-- Helper function for getting the overwrite or default language
|
||||
function ArcCW.GetLanguage()
|
||||
local l = ArcCW.ConVars["language"] and string.lower(ArcCW.ConVars["language"]:GetString())
|
||||
if !l or l == "" then l = string.lower(GetConVar("gmod_language"):GetString()) end
|
||||
return l
|
||||
end
|
||||
|
||||
-- Adds a string to the StringToLang table.
|
||||
function ArcCW.AddStringToLang(str, phrase)
|
||||
if phrase == nil or phrase == "" or str == nil or str == "" then return nil end
|
||||
ArcCW.StringToLang[string.lower(str)] = phrase
|
||||
end
|
||||
|
||||
-- Retrieves a lang phrase from a string. If the string is a phrase itself, it will be returned.
|
||||
function ArcCW.GetPhraseFromString(str)
|
||||
if str == nil or str == "" then return nil end
|
||||
if ArcCW.StringToLang[string.lower(str)] then
|
||||
return ArcCW.StringToLang[string.lower(str)]
|
||||
end
|
||||
if ArcCW.LangTable["en"][string.lower(str)] then
|
||||
return string.lower(str)
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
-- Gets a translated string from a phrase. Will attempt to fallback to English.
|
||||
-- Returns nil if no such phrase exists.
|
||||
function ArcCW.GetTranslation(phrase, format)
|
||||
if phrase == nil or phrase == "" then return nil end
|
||||
local lang = ArcCW.GetLanguage()
|
||||
if !lang or lang == "" or !ArcCW.LangTable[lang] or !ArcCW.LangTable[lang][phrase] then
|
||||
lang = "en"
|
||||
end
|
||||
if ArcCW.LangTable[lang] and ArcCW.LangTable[lang][phrase] then
|
||||
local str = ArcCW.LangTable[lang][phrase]
|
||||
for i, v in pairs(format or {}) do
|
||||
-- print(i, v)
|
||||
str = string.Replace(str, "{" .. i .. "}", v)
|
||||
end
|
||||
return str
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
-- Attempts to translate a string (could be either a raw string or a phrase).
|
||||
-- If fail, return the string itself.
|
||||
function ArcCW.TryTranslation(str, format)
|
||||
if !str then return nil end
|
||||
local phrase = ArcCW.GetPhraseFromString(str)
|
||||
if !phrase then return str end
|
||||
|
||||
return ArcCW.GetTranslation(phrase, format) or str
|
||||
end
|
||||
|
||||
-- Adds a translated string for a specific language's phrase. lang defaults to English.
|
||||
function ArcCW.AddTranslation(phrase, str, lang)
|
||||
if phrase == nil or phrase == "" or str == nil or str == "" then return nil end
|
||||
lang = lang and string.lower(lang) or "en"
|
||||
ArcCW.LangTable[lang] = ArcCW.LangTable[lang] or {}
|
||||
ArcCW.LangTable[lang][string.lower(phrase)] = str
|
||||
end
|
||||
|
||||
-- Translates an ammo string. If enabled, we will use our custom names (pulse -> rifle, smg -> carbine);
|
||||
-- Otherwise returns the in-game translation for it.
|
||||
function ArcCW.TranslateAmmo(ammo)
|
||||
if isnumber(ammo) then ammo = game.GetAmmoName(ammo) end
|
||||
if !ammo or !isstring(ammo) then return nil end
|
||||
ammo = string.lower(ammo)
|
||||
|
||||
local lang = ArcCW.GetLanguage()
|
||||
local str = "ammo." .. ammo
|
||||
if SERVER or ArcCW.ConVars["ammonames"]:GetBool() then
|
||||
if ArcCW.LangTable[lang] and ArcCW.LangTable[lang][str] then
|
||||
return ArcCW.LangTable[lang][str]
|
||||
elseif ArcCW.LangTable["en"][str] then
|
||||
return ArcCW.LangTable["en"][str]
|
||||
end
|
||||
end
|
||||
return SERVER and (ammo .. " ammo") or language.GetPhrase(ammo .. "_ammo")
|
||||
end
|
||||
|
||||
if CLIENT then
|
||||
function ArcCW.LoadClientLanguage(files)
|
||||
local lang = ArcCW.GetLanguage()
|
||||
files = files or file.Find("arccw/client/cl_languages/*", "LUA")
|
||||
|
||||
local lang_tbl = {}
|
||||
local lang_tbl_en = {}
|
||||
|
||||
for _, v in pairs(files) do
|
||||
local exp = string.Explode("_", string.lower(string.Replace(v, ".lua", "")))
|
||||
if lang != "en" and exp[#exp] == lang then
|
||||
include("arccw/client/cl_languages/" .. v)
|
||||
for phrase, str in pairs(L) do
|
||||
lang_tbl[phrase] = str
|
||||
end
|
||||
print("Loaded ArcCW cl_language file " .. v .. " with " .. table.Count(L) .. " strings.")
|
||||
L = nil
|
||||
elseif exp[#exp] == "en" then
|
||||
-- Always load english as backup
|
||||
include("arccw/client/cl_languages/" .. v)
|
||||
for phrase, str in pairs(L) do
|
||||
lang_tbl_en[phrase] = str
|
||||
end
|
||||
end
|
||||
end
|
||||
table.Merge(lang_tbl_en, lang_tbl)
|
||||
for phrase, str in pairs(lang_tbl_en) do
|
||||
language.Add(phrase, str)
|
||||
end
|
||||
end
|
||||
elseif SERVER then
|
||||
for _, v in pairs(file.Find("arccw/client/cl_languages/*", "LUA")) do
|
||||
AddCSLuaFile("arccw/client/cl_languages/" .. v)
|
||||
end
|
||||
end
|
||||
|
||||
function ArcCW.LoadLanguages()
|
||||
ArcCW.LangTable = {}
|
||||
for _, v in pairs(file.Find("arccw/shared/languages/*", "LUA")) do
|
||||
include("arccw/shared/languages/" .. v)
|
||||
AddCSLuaFile("arccw/shared/languages/" .. v)
|
||||
|
||||
local exp = string.Explode("_", string.lower(string.Replace(v, ".lua", "")))
|
||||
local lang = exp[#exp]
|
||||
|
||||
if !lang then
|
||||
print("Failed to load ArcCW language file " .. v .. ", did not get language name (naming convention incorrect?)")
|
||||
continue
|
||||
elseif !L then
|
||||
print("Failed to load ArcCW language file " .. v .. ", did not get language table")
|
||||
continue
|
||||
end
|
||||
|
||||
for phrase, str in pairs(L) do
|
||||
ArcCW.AddTranslation(phrase, str, lang)
|
||||
end
|
||||
|
||||
-- Load StringToLang stuff incase it is needed
|
||||
if STL then
|
||||
for str, phrase in pairs(STL) do
|
||||
ArcCW.AddStringToLang(str, phrase)
|
||||
end
|
||||
end
|
||||
|
||||
print("Loaded ArcCW language file " .. v .. " with " .. table.Count(L) .. " strings.")
|
||||
L = nil
|
||||
STL = nil
|
||||
end
|
||||
|
||||
if CLIENT then
|
||||
ArcCW.LoadClientLanguage()
|
||||
end
|
||||
|
||||
hook.Run("ArcCW_LocalizationLoaded")
|
||||
end
|
||||
|
||||
ArcCW.LoadLanguages()
|
||||
hook.Add("PreGamemodeLoaded", "ArcCW_Lang", function()
|
||||
if CLIENT and ArcCW.ConVars["ammonames"]:GetBool() then
|
||||
local ourlang = ArcCW.GetLanguage()
|
||||
for _, name in pairs(game.GetAmmoTypes()) do
|
||||
if ArcCW.LangTable[ourlang] and ArcCW.LangTable[ourlang]["ammo." .. string.lower(name)] then
|
||||
language.Add(name .. "_ammo", ArcCW.LangTable[ourlang]["ammo." .. string.lower(name)])
|
||||
elseif ArcCW.LangTable["en"]["ammo." .. string.lower(name)] then
|
||||
language.Add(name .. "_ammo", ArcCW.LangTable["en"]["ammo." .. string.lower(name)])
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
concommand.Add("arccw_reloadlangs", function(ply)
|
||||
if SERVER and !game.SinglePlayer() and IsValid(ply) and !ply:IsSuperAdmin() then return end
|
||||
|
||||
ArcCW.LoadLanguages()
|
||||
if SERVER and game.SinglePlayer() then
|
||||
net.Start("arccw_sp_reloadlangs")
|
||||
net.Broadcast()
|
||||
end
|
||||
end, nil, "Reloads all language files.")
|
||||
|
||||
if game.SinglePlayer() then
|
||||
net.Receive("arccw_sp_reloadlangs", function()
|
||||
ArcCW.LoadLanguages()
|
||||
end)
|
||||
end
|
||||
Reference in New Issue
Block a user