Aller au contenu

API des locales

Tout vient de bs_core/shared/sh_locale.lua. La façon de préparer une resource à la traduction est sur Langues. Cette page est la référence.

Langues : en, pt, de, pl, tr, es, fr, it, ru. Les clés manquantes retombent sur en, puis sur la clé elle-même.

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

Chaque locales/<lang>.lua renvoie une table plate :

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

Les placeholders s’écrivent {name}. Un placeholder inconnu est laissé tel quel, pour que les fautes de frappe se voient au lieu de disparaître.

FonctionCôtéCe qu’elle fait
L(key, vars)clientTexte dans la langue du joueur local
L(key, vars)serverTexte dans la langue par défaut du serveur
L(src, key, vars)serverTexte dans la langue de ce joueur
Lp(src, key, vars)serverPareil que ci-dessus, prend toujours un source
BSLocale.T(lang, key, vars)les deuxTexte dans une langue que tu nommes
BSLocale.Lang()les deuxLangue du joueur local (client) ou celle par défaut (server)
BSLocale.LangOf(src)les deuxLangue d’un joueur, retombe sur celle par défaut
BSLocale.Default()les deuxDéfaut du serveur (GlobalState.bs_defaultLang, sinon en)
BSLocale.IsValid(lang)les deuxSi c’est l’un des neuf codes
BSLocale.Dict(lang)les deuxLa table complète avec en dessous, pour NUI
BSLocale.OnChange(fn)clientfn(lang) s’exécute quand la langue change
BSLocale.Set(lang)clientDemande à bs_core de changer la langue du joueur
BSLocale.Languages, BSLocale.Nativeles deuxLa liste des codes et les noms natifs

Export serveur : exports.bs_core:GetLanguage(src).

Côté serveur, passe toujours le source du joueur quand le texte va à un seul joueur. L('key') sans source utilise la langue par défaut du serveur, ce qui est faux pour une notification.

TriggerClientEvent('bs:ui:notify', src, { type = 'success', message = L(src, 'shop.bought', { item = label, price = 50 }) })
  • Choix du joueur : state bag bs_lang sur le joueur.
  • Défaut du serveur : GlobalState.bs_defaultLang (F1 Global.defaultLanguage, ou la convar bs_defaultLanguage).
  • Enregistré par compte dans bs_users.language.
  • Le changer déclenche l’événement serveur bs_core:setLanguage.

Si la resource a une ui_page, le script de locales répond au callback NUI bs_i18n avec { lang, dict } et pousse la nouvelle table quand la langue change. Charge le helper et balise ton HTML :

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

En JS : t('key', vars) et BSI18n.onChange(fn). Détails sur Langues.