Przejdź do głównej zawartości

API locale

To wszystko pochodzi z bs_core/shared/sh_locale.lua. Jak przygotować resource do tłumaczenia, opisują Języki. Ta strona jest referencją.

Języki: en, pt, de, pl, tr, es, fr, it, ru. Brakujące klucze wracają do en, a potem do samego klucza.

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

Każdy locales/<lang>.lua zwraca płaską tabelę:

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

Placeholdery to {name}. Nieznany placeholder zostaje bez zmian, żeby literówki było widać zamiast znikać.

FunkcjaStronaCo robi
L(key, vars)clientTekst w języku lokalnego gracza
L(key, vars)serverTekst w domyślnym języku serwera
L(src, key, vars)serverTekst w języku tego gracza
Lp(src, key, vars)serverTo samo co wyżej, zawsze bierze source
BSLocale.T(lang, key, vars)obieTekst w języku, który podasz
BSLocale.Lang()obieJęzyk lokalnego gracza (client) lub domyślny (server)
BSLocale.LangOf(src)obieJęzyk gracza, wraca do domyślnego
BSLocale.Default()obieDomyślny serwera (GlobalState.bs_defaultLang, inaczej en)
BSLocale.IsValid(lang)obieCzy to jeden z dziewięciu kodów
BSLocale.Dict(lang)obieCała tabela z en pod spodem, dla NUI
BSLocale.OnChange(fn)clientfn(lang) odpala się, gdy język się zmienia
BSLocale.Set(lang)clientProsi bs_core o zmianę języka gracza
BSLocale.Languages, BSLocale.NativeobieLista kodów i nazwy własne

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

Na serwerze zawsze podawaj source gracza, gdy tekst idzie do jednego gracza. L('key') bez source używa domyślnego języka serwera, co przy powiadomieniu jest błędem.

TriggerClientEvent('bs:ui:notify', src, { type = 'success', message = L(src, 'shop.bought', { item = label, price = 50 }) })
  • Wybór gracza: state bag bs_lang na graczu.
  • Domyślny serwera: GlobalState.bs_defaultLang (F1 Global.defaultLanguage lub convar bs_defaultLanguage).
  • Zapisywany per konto w bs_users.language.
  • Zmiana odpala event serwera bs_core:setLanguage.

Jeśli resource ma ui_page, skrypt locale odpowiada na callback NUI bs_i18n obiektem { lang, dict } i wysyła nową tabelę, gdy język się zmienia. Załaduj helper i oznacz swój HTML:

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

W JS: t('key', vars) i BSI18n.onChange(fn). Szczegóły w Językach.