mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
160 lines
4.0 KiB
Lua
160 lines
4.0 KiB
Lua
--[[
|
|
| 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/
|
|
--]]
|
|
|
|
pace.KnownGUIStrings = pace.KnownGUIStrings or {}
|
|
pace.CurrentTranslation = {}
|
|
|
|
local cvar = CreateClientConVar("pac_language", "english", true)
|
|
|
|
function pace.LanguageString(val)
|
|
local key = val:Trim():lower()
|
|
|
|
pace.KnownGUIStrings[key] = val
|
|
|
|
return pace.CurrentTranslation[key] or val
|
|
end
|
|
|
|
local L = pace.LanguageString
|
|
|
|
function pace.AddLanguagesToMenu(menu)
|
|
local menu, pnl = menu:AddSubMenu(L"language")
|
|
pnl:SetImage("icon16/world_edit.png")
|
|
menu.GetDeleteSelf = function() return false end
|
|
menu:AddOption("english", function()
|
|
pace.SetLanguage("english")
|
|
end)
|
|
|
|
for key, val in pairs(file.Find("pac3/editor/client/translations/*", "LUA")) do
|
|
val = val:gsub("%.lua", "")
|
|
menu:AddOption(val, function()
|
|
pace.SetLanguage(val)
|
|
end)
|
|
end
|
|
|
|
menu:AddSpacer()
|
|
|
|
menu:AddOption("edit", function() pace.ShowLanguageEditor() end)
|
|
end
|
|
|
|
function pace.ShowLanguageEditor()
|
|
local lang = cvar:GetString()
|
|
|
|
local frame = vgui.Create("DFrame")
|
|
frame:SetSize(512, 512)
|
|
frame:Center()
|
|
frame:MakePopup()
|
|
frame:SetTitle(L"translation editor")
|
|
|
|
local list = vgui.Create("DListView", frame)
|
|
list:Dock(FILL)
|
|
|
|
list:AddColumn("english")
|
|
list:AddColumn(lang)
|
|
|
|
local strings = {}
|
|
|
|
for k,v in pairs(pace.KnownGUIStrings) do
|
|
strings[k] = v:Trim():lower()
|
|
end
|
|
table.Merge(strings, pace.CurrentTranslation)
|
|
|
|
for english, other in pairs(strings) do
|
|
|
|
local line = list:AddLine(english, other)
|
|
line.OnRightClick = function()
|
|
local menu = DermaMenu()
|
|
menu:SetPos(input.GetCursorPos())
|
|
menu:AddOption(L"edit", function()
|
|
local window = Derma_StringRequest(
|
|
L"translate",
|
|
english,
|
|
other,
|
|
|
|
function(new)
|
|
pace.CurrentTranslation[english] = new
|
|
line:SetValue(2, new)
|
|
pace.SaveCurrentTranslation()
|
|
end
|
|
)
|
|
for _, pnl in pairs(window:GetChildren()) do
|
|
if pnl.ClassName == "DPanel" then
|
|
for key, pnl in pairs(pnl:GetChildren()) do
|
|
if pnl.ClassName == "DTextEntry" then
|
|
pnl:SetAllowNonAsciiCharacters(true)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end):SetImage(pace.MiscIcons.edit)
|
|
menu:AddOption(L"revert", function()
|
|
local new = CompileFile("pac3/editor/client/translations/"..lang..".lua")()[english]
|
|
pace.CurrentTranslation[english] = new
|
|
line:SetValue(2, new or english)
|
|
pace.SaveCurrentTranslation()
|
|
end):SetImage(pace.MiscIcons.revert)
|
|
|
|
menu:MakePopup()
|
|
end
|
|
end
|
|
|
|
list:SizeToContents()
|
|
end
|
|
|
|
function pace.SaveCurrentTranslation()
|
|
local str = {}
|
|
|
|
table.insert(str, "return {")
|
|
|
|
for key, val in pairs(pace.CurrentTranslation) do
|
|
table.insert(str, string.format("[%q] = %q,", key, val))
|
|
end
|
|
|
|
table.insert(str, "}")
|
|
|
|
file.CreateDir("pac3_editor", "DATA")
|
|
file.Write("pac3_editor/" .. cvar:GetString() .. ".txt", table.concat(str, "\n"), "DATA")
|
|
end
|
|
|
|
function pace.GetOutputForTranslation()
|
|
local str = ""
|
|
|
|
for key, val in pairs(pace.KnownGUIStrings) do
|
|
str = str .. ("%s = %s\n"):format(key:gsub("(.)","_%1_"), val)
|
|
end
|
|
|
|
return str
|
|
end
|
|
|
|
function pace.SetLanguage(lang)
|
|
|
|
lang = lang or cvar:GetString()
|
|
RunConsoleCommand("pac_language", lang)
|
|
|
|
pace.CurrentTranslation = {}
|
|
|
|
if lang ~= "english" then
|
|
if file.Exists("pac3_editor/" .. lang .. ".txt", "DATA") then
|
|
table.Merge(pace.CurrentTranslation, CompileString(file.Read("pac3_editor/" .. lang .. ".txt", "DATA"), "pac3_lang")())
|
|
elseif file.Exists("pac3/editor/client/translations/"..lang..".lua", "LUA") then
|
|
table.Merge(pace.CurrentTranslation, CompileFile("pac3/editor/client/translations/"..lang..".lua")())
|
|
else
|
|
pac.Message(Color(255,0,0), "language " .. lang .. " does not exist, falling back to english")
|
|
RunConsoleCommand("pac_language", "english")
|
|
lang = "english"
|
|
end
|
|
end
|
|
|
|
if pace.Editor and pace.Editor:IsValid() then
|
|
pace.CloseEditor()
|
|
timer.Simple(0.1, function()
|
|
pace.OpenEditor()
|
|
end)
|
|
end
|
|
end |