Langues et traductions
L’UI du jeu peut tourner en 9 langues : en, pt, de, pl, tr, es, fr, it, ru. Toutes les chaînes ne sont pas encore traduites, ce qui manque retombe sur l’anglais.
Comment ça marche
Section intitulée « Comment ça marche »- Le choix de chaque joueur est enregistré par compte (
bs_users.language, ajouté par la migration030_user_language.sql) et publié dans le state bag du joueurbs_lang. - Un choix vide veut dire « suivre le défaut du serveur ». Le défaut vient de F1
Global.defaultLanguage, sinon de la convarbs_defaultLanguage, sinonen. Il est dansGlobalState.bs_defaultLang. - Les joueurs le changent dans l’onglet Settings de l’inventaire. Ça déclenche
bs_core:setLanguage, et chaque resource se met à jour en direct, sans reconnexion. exports.bs_core:GetLanguage(src)te donne la langue d’un joueur côté serveur.
Traduire une resource
Section intitulée « Traduire une resource »Resources avec un dossier locales/ jusqu’ici : 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.
Les fonctions Lua et NUI sont dans l’API des locales.
1. fxmanifest
Section intitulée « 1. fxmanifest »shared_script '@bs_core/shared/sh_locale.lua'files { 'locales/*.lua' }2. locales/<lang>.lua
Section intitulée « 2. locales/<lang>.lua »Chaque fichier renvoie une table plate. {name} est un placeholder.
-- locales/en.luareturn { ['ui.level'] = 'LEVEL', ['msg.picked_up'] = 'You picked up {item}.',}Copie en.lua vers pt.lua (et ainsi de suite) et traduis les valeurs. Ne traduis jamais les clés. Une clé manquante retombe sur l’anglais, puis sur la clé elle-même, donc un fichier à moitié fini convient.
-- 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) s’exécute côté client quand la langue change, pour le texte que tu as construit toi-même.
Si la resource a une ui_page, le script de locales envoie la table fusionnée à la page. Charge le helper partagé avant le script de ta page :
<script src="nui://bs_ui/html/js/i18n.js"></script>Ensuite balise le HTML. Le texte anglais dans le markup sert de repli :
<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">En JS, utilise t('key', { name: 'x' }) et BSI18n.onChange(fn) pour redessiner le texte dynamique.
Conseils
Section intitulée « Conseils »- Garde des clés stables et regroupées (
ui.,msg.,err.). Changer une clé casse toutes ses traductions. - Ne mets pas de texte d’équilibrage avec des nombres en dur, utilise des placeholders pour que le nombre suive 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.