Eai, tudo certo?
Existem diversas maneiras de atingir esse objetivo, vou tentar te explicar a maneira que eu usaria.
Na resource em que você faz a troca de linguagens:
-- Adicione um evento, que será chamado sempre que houver mudança na seleção de idioma
addEvent('onChangeLanguage', true)
-- Adicione alguma maneira de trocar o idioma enquanto joga, já que no seu caso ele só está sendo setado entrar no jogo
-- Por exemplo: ao clicar em um combobox de seleção de linguagens, chame a funçao abaixo
SetNewLanguage = function(newLang)
setElementData(localPlayer, 'language', newLang)
-- Chame o evento (depois de atualizar o valor da linguagem atual)
triggerEvent('onChangeLanguage', localPlayer)
end
Na outra resource (onde você criou alguma interface GUI):
-- Incie uma tabela para armazenar os dados
local toTranslate = {}
-- Crie uma função para inserir os elementos dentro da tabela
AssignTranslation = function(element, value)
toTranslate[element] = value
end
-- Crie uma função para traduzir todos os elementos da tabela
TranslateUI = function()
for elem, value in pairs(toTranslate) do
guiSetText(elem, exports.DayZ:getLanguageTextClient(value))
end
end
-- Adicione um handler para o evento de quando se troca de idioma, para forçar a tradução dos elementos que estão na tabela
addEventHandler('onChangeLanguage', localPlayer, TranslateUI)
-- Crie os elementos gui e configure uma tradução pra eles
local guiWindow
CreateUI = function()
local w, h = 500, 500
guiWindow = guiCreateWindow((sW - w) / 2, (sH - h) / 2, w, h, '', false)
AssignTranslation(guiWindow, 'settingsL')
guiSetVisible(guiWindow, false)
local label = guiCreateLabel(100, 100, 200, 200, '', false, guiWindow)
AssignTranslation(label, 'playL')
end
addEventHandler('onClientResourceStart', resourceRoot, CreateUI)
-- Adicione um comando para exibir/esconder a janela
addCommandHandler('toggle', function()
if (not isElement(guiWindow)) then
return false
end
local state = not guiGetVisible(guiWindow)
-- Caso vá exibir a janela, chamamos a função para traduzir os textos
if state then
TranslateUI()
end
guiSetVisible(guiWindow, state)
showCursor(state)
end)
Dessa forma, sempre que você trocar de linguagem ou abrir a interface, todos os elementos GUI serão traduzidos para a linguagem atual do jogador.
No caso de funções DX (como dxDrawText), não é necessário fazer esse procedimento, já que elas são chamadas a cada frame com o valor atualizado, a única recomendação que eu deixaria é que você crie uma função para fazer cache das traduções, justamente para evitar ficar chamando via exports o tempo todo, que pode causar uma grande perda de desempenho. Algo como:
local cache = {}
Translate = function(text)
if (cache[text] == nil) then
cache[text] = exports.DayZ:getLanguageTextClient(text)
end
return cache[text]
end
Dessa forma, ao invés de ficar sempre chamando o exports, voce chamaria diretamente a função Translate.
Boa sorte