Zum Inhalt springen

Locales-API

Alles hier stammt aus bs_core/shared/sh_locale.lua. Wie du eine Resource für Übersetzung vorbereitest, steht unter Sprachen. Diese Seite ist die Referenz.

Sprachen: en, pt, de, pl, tr, es, fr, it, ru. Fehlende Schlüssel fallen auf en zurück, danach auf den Schlüssel selbst.

shared_scripts { '@bs_core/shared/sh_locale.lua' }
files { 'locales/*.lua' }

Jede locales/<lang>.lua gibt eine flache Tabelle zurück:

return {
['shop.title'] = 'Trader',
['shop.bought'] = 'You bought {item} for ${price}',
}

Platzhalter sind {name}. Ein unbekannter Platzhalter bleibt unverändert, damit Tippfehler sichtbar werden statt zu verschwinden.

FunktionSeiteWas sie tut
L(key, vars)clientText in der Sprache des lokalen Spielers
L(key, vars)serverText in der Standardsprache des Servers
L(src, key, vars)serverText in der Sprache dieses Spielers
Lp(src, key, vars)serverWie oben, nimmt immer einen Source
BSLocale.T(lang, key, vars)beideText in einer Sprache, die du nennst
BSLocale.Lang()beideSprache des lokalen Spielers (Client) oder die Standardsprache (Server)
BSLocale.LangOf(src)beideSprache eines Spielers, fällt auf die Standardsprache zurück
BSLocale.Default()beideServer-Standard (GlobalState.bs_defaultLang, sonst en)
BSLocale.IsValid(lang)beideOb es einer der neun Codes ist
BSLocale.Dict(lang)beideDie ganze Tabelle mit en darunter, für NUI
BSLocale.OnChange(fn)clientfn(lang) läuft, wenn sich die Sprache ändert
BSLocale.Set(lang)clientBittet bs_core, die Sprache des Spielers zu ändern
BSLocale.Languages, BSLocale.NativebeideDie Codeliste und die Eigennamen

Server-Export: exports.bs_core:GetLanguage(src).

Gib auf dem Server immer den Source des Spielers mit, wenn der Text an einen Spieler geht. L('key') ohne Source nutzt die Server-Standardsprache, und die ist für eine Benachrichtigung falsch.

TriggerClientEvent('bs:ui:notify', src, { type = 'success', message = L(src, 'shop.bought', { item = label, price = 50 }) })
  • Wahl des Spielers: State Bag bs_lang am Spieler.
  • Server-Standard: GlobalState.bs_defaultLang (F1 Global.defaultLanguage oder die Convar bs_defaultLanguage).
  • Pro Account gespeichert in bs_users.language.
  • Eine Änderung löst das Server-Event bs_core:setLanguage aus.

Hat die Resource eine ui_page, beantwortet das Locale-Skript den NUI-Callback bs_i18n mit { lang, dict } und schickt die neue Tabelle, wenn sich die Sprache ändert. Lade den Helper und markiere dein HTML:

<script src="nui://bs_ui/html/js/i18n.js"></script>
<span data-i18n="ui.level">LEVEL</span>

In JS: t('key', vars) und BSI18n.onChange(fn). Details unter Sprachen.