Idiomas e traduções
A UI do jogo pode correr em 9 idiomas: en, pt, de, pl, tr, es, fr, it, ru. Nem todas as strings estão traduzidas ainda, o que faltar recorre ao inglês.
Como funciona
Seção intitulada “Como funciona”- A escolha de cada jogador é guardada por conta (
bs_users.language, acrescentada pela migração030_user_language.sql) e publicada no state bag do jogadorbs_lang. - Uma escolha vazia significa “seguir o padrão do servidor”. O padrão vem do F1
Global.defaultLanguage, senão da convarbs_defaultLanguage, senãoen. Está emGlobalState.bs_defaultLang. - Os jogadores mudam-no no separador Settings do inventário. Isso dispara
bs_core:setLanguagee todos os resources atualizam em direto, sem reconectar. exports.bs_core:GetLanguage(src)dá-te o idioma de um jogador no servidor.
Traduzir um resource
Seção intitulada “Traduzir um resource”Resources com uma pasta locales/ até agora: bs_admin, bs_bodily, bs_boosters, bs_building, bs_chat, bs_cinecam, bs_core, bs_crafting, bs_drugs, bs_economy, bs_emotes, bs_events, bs_extraction, bs_faction_bases, bs_factions, bs_gadgets, bs_gates, bs_interactions, bs_inventory, bs_jobs, bs_medical, bs_menu, bs_mining, bs_multichar, bs_radial, bs_recycler, bs_scenes, bs_scoreboard, bs_skills, bs_stash, bs_tester, bs_traders, bs_ui, bs_vehicles, bs_vip, bs_weapons, bs_zombies.
As funções Lua e NUI estão na API de locales.
1. fxmanifest
Seção intitulada “1. fxmanifest”shared_script '@bs_core/shared/sh_locale.lua'files { 'locales/*.lua' }2. locales/<lang>.lua
Seção intitulada “2. locales/<lang>.lua”Cada ficheiro devolve uma tabela plana. {name} é um placeholder.
-- locales/en.luareturn { ['ui.level'] = 'LEVEL', ['msg.picked_up'] = 'You picked up {item}.',}Copia en.lua para pt.lua (e assim por diante) e traduz os valores. Nunca traduzas as chaves. Uma chave em falta recorre ao inglês e depois à própria chave, por isso um ficheiro a meio é aceitável.
-- client: the local player's languagelocal s = L('msg.picked_up', { item = 'Bandage' })
-- server: L(src, key, vars) or Lp(src, key, vars) uses that player's languageTriggerClientEvent('chat:addMessage', src, { args = { L(src, 'msg.picked_up', { item = 'Bandage' }) } })
-- server without a source: the server defaultprint(L('msg.picked_up', { item = 'Bandage' }))BSLocale.OnChange(function(lang) ... end) corre no client quando o idioma muda, para texto que construíste tu.
Se o resource tiver um ui_page, o script de locale envia a tabela combinada para a página. Carrega o helper partilhado antes do script da tua página:
<script src="nui://bs_ui/html/js/i18n.js"></script>Depois marca o HTML. O texto em inglês no markup é o fallback:
<span data-i18n="ui.level">LEVEL</span><p data-i18n-html="ui.help_html">Press <b>E</b></p><input data-i18n-attr="placeholder:ui.search;title:ui.search_tip" placeholder="Search">Em JS usa t('key', { name: 'x' }) e BSI18n.onChange(fn) para voltar a desenhar o texto dinâmico.
- Mantém as chaves estáveis e agrupadas (
ui.,msg.,err.). Mudar uma chave estraga todas as traduções dela. - Não metas texto de balanceamento com números fixos, usa placeholders para que o número acompanhe a config.
bs19.org · Privacy · Terms · Cookie settings
Cookies and outside content
The site only needs two essential cookies to keep you logged in and protect forms. Videos and streams from YouTube and Twitch load from their servers, which can set their own cookies, so they stay off until you say yes. Nothing is pre-ticked and you can change your mind any time with "Cookie settings" at the bottom of every page. Details.
Questions about the server, the framework or the site? A real person reads this, usually within a day.