Idiomas y traducciones
La UI del juego puede funcionar en 9 idiomas: en, pt, de, pl, tr, es, fr, it, ru. No todas las cadenas están traducidas todavía, lo que falte recurre al inglés.
Cómo funciona
Sección titulada «Cómo funciona»- La elección de cada jugador se guarda por cuenta (
bs_users.language, añadido por la migración030_user_language.sql) y se publica en el state bag del jugadorbs_lang. - Una elección vacía significa “seguir el valor por defecto del servidor”. El valor por defecto sale de F1
Global.defaultLanguage, si no de la convarbs_defaultLanguage, si noen. Está enGlobalState.bs_defaultLang. - Los jugadores lo cambian en la pestaña Settings del inventario. Eso dispara
bs_core:setLanguagey todos los resources se actualizan en vivo, sin reconectar. exports.bs_core:GetLanguage(src)te da el idioma de un jugador en el servidor.
Traducir un resource
Sección titulada «Traducir un resource»Resources con carpeta locales/ hasta ahora: 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.
Las funciones de Lua y NUI están en la API de locales.
1. fxmanifest
Sección titulada «1. fxmanifest»shared_script '@bs_core/shared/sh_locale.lua'files { 'locales/*.lua' }2. locales/<lang>.lua
Sección titulada «2. locales/<lang>.lua»Cada archivo devuelve una tabla plana. {name} es un placeholder.
-- locales/en.luareturn { ['ui.level'] = 'LEVEL', ['msg.picked_up'] = 'You picked up {item}.',}Copia en.lua a pt.lua (y así sucesivamente) y traduce los valores. Nunca traduzcas las claves. Una clave que falta recurre al inglés y luego a la propia clave, así que un archivo a medias está bien.
-- 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) se ejecuta en el client cuando cambia el idioma, para el texto que hayas construido tú.
Si el resource tiene un ui_page, el script de locales envía la tabla combinada a la página. Carga el helper compartido antes del script de tu página:
<script src="nui://bs_ui/html/js/i18n.js"></script>Luego marca el HTML. El texto en inglés del markup es el 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">En JS usa t('key', { name: 'x' }) y BSI18n.onChange(fn) para volver a dibujar el texto dinámico.
Consejos
Sección titulada «Consejos»- Mantén las claves estables y agrupadas (
ui.,msg.,err.). Cambiar una clave rompe todas sus traducciones. - No pongas texto de balance con números fijos, usa placeholders para que el número siga a 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.