Pular para o conteúdo

API de locales

Tudo isto vem de bs_core/shared/sh_locale.lua. Como preparar um resource para tradução está em Idiomas. Esta página é a referência.

Idiomas: en, pt, de, pl, tr, es, fr, it, ru. Chaves em falta recorrem a en e depois à própria chave.

shared_scripts { '@bs_core/shared/sh_locale.lua' }
files { 'locales/*.lua' }

Cada locales/<lang>.lua devolve uma tabela plana:

return {
['shop.title'] = 'Trader',
['shop.bought'] = 'You bought {item} for ${price}',
}

Os placeholders são {name}. Um placeholder desconhecido fica como está, para os erros de escrita aparecerem em vez de desaparecerem.

FunçãoLadoO que faz
L(key, vars)clientTexto no idioma do jogador local
L(key, vars)serverTexto no idioma por defeito do servidor
L(src, key, vars)serverTexto no idioma desse jogador
Lp(src, key, vars)serverO mesmo que acima, recebe sempre um source
BSLocale.T(lang, key, vars)ambosTexto num idioma que indicas
BSLocale.Lang()ambosIdioma do jogador local (client) ou o por defeito (server)
BSLocale.LangOf(src)ambosIdioma de um jogador, recorre ao por defeito
BSLocale.Default()ambosPor defeito do servidor (GlobalState.bs_defaultLang, senão en)
BSLocale.IsValid(lang)ambosSe é um dos nove códigos
BSLocale.Dict(lang)ambosA tabela completa com en por baixo, para NUI
BSLocale.OnChange(fn)clientfn(lang) corre quando o idioma muda
BSLocale.Set(lang)clientPede ao bs_core para mudar o idioma do jogador
BSLocale.Languages, BSLocale.NativeambosA lista de códigos e os nomes nativos

Export do servidor: exports.bs_core:GetLanguage(src).

No servidor, passa sempre o source do jogador quando o texto vai para um só jogador. L('key') sem source usa o idioma por defeito do servidor, o que está errado para uma notificação.

TriggerClientEvent('bs:ui:notify', src, { type = 'success', message = L(src, 'shop.bought', { item = label, price = 50 }) })
  • Escolha do jogador: state bag bs_lang no jogador.
  • Por defeito do servidor: GlobalState.bs_defaultLang (F1 Global.defaultLanguage, ou a convar bs_defaultLanguage).
  • Guardado por conta em bs_users.language.
  • Mudá-lo dispara o evento de servidor bs_core:setLanguage.

Se o resource tiver um ui_page, o script de locale responde ao callback NUI bs_i18n com { lang, dict } e envia a nova tabela quando o idioma muda. Carrega o helper e marca o teu HTML:

<script src="nui://bs_ui/html/js/i18n.js"></script>
<span data-i18n="ui.level">LEVEL</span>

Em JS: t('key', vars) e BSI18n.onChange(fn). Detalhes em Idiomas.