Lingue e traduzioni
L’UI del gioco può funzionare in 9 lingue: en, pt, de, pl, tr, es, fr, it, ru. Non tutte le stringhe sono ancora tradotte, ciò che manca ripiega sull’inglese.
Come funziona
Sezione intitolata “Come funziona”- La scelta di ogni giocatore è salvata per account (
bs_users.language, aggiunto dalla migrazione030_user_language.sql) e pubblicata nello state bag del giocatorebs_lang. - Una scelta vuota significa “segui il predefinito del server”. Il predefinito viene da F1
Global.defaultLanguage, altrimenti dalla convarbs_defaultLanguage, altrimentien. Sta inGlobalState.bs_defaultLang. - I giocatori lo cambiano nella scheda Settings dell’inventario. Questo scatena
bs_core:setLanguagee ogni resource si aggiorna in tempo reale, senza riconnettersi. exports.bs_core:GetLanguage(src)ti dà la lingua di un giocatore sul server.
Tradurre una resource
Sezione intitolata “Tradurre una resource”Resource con una cartella locales/ finora: 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.
Le funzioni Lua e NUI sono nell’API delle locale.
1. fxmanifest
Sezione intitolata “1. fxmanifest”shared_script '@bs_core/shared/sh_locale.lua'files { 'locales/*.lua' }2. locales/<lang>.lua
Sezione intitolata “2. locales/<lang>.lua”Ogni file restituisce una tabella piatta. {name} è un placeholder.
-- locales/en.luareturn { ['ui.level'] = 'LEVEL', ['msg.picked_up'] = 'You picked up {item}.',}Copia en.lua in pt.lua (e così via) e traduci i valori. Non tradurre mai le chiavi. Una chiave mancante ripiega sull’inglese, poi sulla chiave stessa, quindi un file a metà va bene.
-- 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) gira sul client quando la lingua cambia, per il testo che hai costruito tu.
Se la resource ha una ui_page, lo script di locale manda la tabella unita alla pagina. Carica l’helper condiviso prima dello script della tua pagina:
<script src="nui://bs_ui/html/js/i18n.js"></script>Poi marca l’HTML. Il testo inglese nel markup è il 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">In JS usa t('key', { name: 'x' }) e BSI18n.onChange(fn) per ridisegnare il testo dinamico.
Consigli
Sezione intitolata “Consigli”- Tieni le chiavi stabili e raggruppate (
ui.,msg.,err.). Cambiare una chiave rompe tutte le sue traduzioni. - Non mettere testo di bilanciamento con numeri fissi, usa i placeholder così il numero segue la 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.