Sprachen & Übersetzungen
Die Spiel-UI kann in 9 Sprachen laufen: en, pt, de, pl, tr, es, fr, it, ru. Nicht jeder String ist schon übersetzt, was fehlt, fällt auf Englisch zurück.
So funktioniert es
Abschnitt betitelt „So funktioniert es“- Die Wahl jedes Spielers wird pro Account gespeichert (
bs_users.language, hinzugefügt durch Migration030_user_language.sql) und im Spieler-State-Bagbs_langveröffentlicht. - Eine leere Wahl heißt “dem Server-Standard folgen”. Der Standard kommt aus F1
Global.defaultLanguage, sonst aus der Convarbs_defaultLanguage, sonsten. Er steht inGlobalState.bs_defaultLang. - Spieler ändern ihn im Settings-Tab des Inventars. Das löst
bs_core:setLanguageaus, und jede Resource aktualisiert sich live, ohne Reconnect. exports.bs_core:GetLanguage(src)liefert dir die Sprache eines Spielers auf dem Server.
Eine Resource übersetzen
Abschnitt betitelt „Eine Resource übersetzen“Resources mit einem locales/-Ordner bisher: 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.
Die Lua- und NUI-Funktionen stehen in der Locales-API.
1. fxmanifest
Abschnitt betitelt „1. fxmanifest“shared_script '@bs_core/shared/sh_locale.lua'files { 'locales/*.lua' }2. locales/<lang>.lua
Abschnitt betitelt „2. locales/<lang>.lua“Jede Datei gibt eine flache Tabelle zurück. {name} ist ein Platzhalter.
-- locales/en.luareturn { ['ui.level'] = 'LEVEL', ['msg.picked_up'] = 'You picked up {item}.',}Kopiere en.lua nach pt.lua (und so weiter) und übersetze die Werte. Übersetze niemals die Schlüssel. Ein fehlender Schlüssel fällt auf Englisch zurück, dann auf den Schlüssel selbst, eine halb fertige Datei ist also in Ordnung.
-- 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) läuft auf dem Client, wenn sich die Sprache ändert, für Text, den du selbst gebaut hast.
Hat die Resource eine ui_page, schickt das Locale-Skript die zusammengeführte Tabelle an die Seite. Lade den gemeinsamen Helper vor dem Skript deiner Seite:
<script src="nui://bs_ui/html/js/i18n.js"></script>Dann markiere das HTML. Der englische Text im Markup ist der 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 nutze t('key', { name: 'x' }) und BSI18n.onChange(fn), um dynamischen Text neu zu rendern.
- Halte Schlüssel stabil und gruppiert (
ui.,msg.,err.). Wer einen Schlüssel ändert, macht alle Übersetzungen davon kaputt. - Schreib keinen Balance-Text mit festen Zahlen, nutze Platzhalter, damit die Zahl der Config folgt.
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.