Перейти к содержимому

API локалей

Всё это находится в bs_core/shared/sh_locale.lua. Как подготовить resource к переводу, описано в Языках. Эта страница - справочник.

Языки: en, pt, de, pl, tr, es, fr, it, ru. Отсутствующие ключи откатываются на en, затем на сам ключ.

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

Каждый locales/<lang>.lua возвращает плоскую таблицу:

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

Плейсхолдеры записываются как {name}. Неизвестный плейсхолдер остаётся как есть, чтобы опечатки были видны, а не исчезали.

ФункцияСторонаЧто делает
L(key, vars)clientТекст на языке локального игрока
L(key, vars)serverТекст на языке сервера по умолчанию
L(src, key, vars)serverТекст на языке этого игрока
Lp(src, key, vars)serverТо же, что выше, всегда принимает source
BSLocale.T(lang, key, vars)обеТекст на указанном тобой языке
BSLocale.Lang()обеЯзык локального игрока (client) или язык по умолчанию (server)
BSLocale.LangOf(src)обеЯзык игрока, откат на язык по умолчанию
BSLocale.Default()обеЯзык сервера по умолчанию (GlobalState.bs_defaultLang, иначе en)
BSLocale.IsValid(lang)обеОдин ли это из девяти кодов
BSLocale.Dict(lang)обеВся таблица с en внизу, для NUI
BSLocale.OnChange(fn)clientfn(lang) вызывается при смене языка
BSLocale.Set(lang)clientПросит bs_core сменить язык игрока
BSLocale.Languages, BSLocale.NativeобеСписок кодов и родные названия

Серверный export: exports.bs_core:GetLanguage(src).

На сервере всегда передавай source игрока, когда текст уходит одному игроку. L('key') без source использует язык сервера по умолчанию, а для уведомления это неверно.

TriggerClientEvent('bs:ui:notify', src, { type = 'success', message = L(src, 'shop.bought', { item = label, price = 50 }) })
  • Выбор игрока: state bag bs_lang на игроке.
  • По умолчанию для сервера: GlobalState.bs_defaultLang (F1 Global.defaultLanguage или convar bs_defaultLanguage).
  • Сохраняется для каждого аккаунта в bs_users.language.
  • Его изменение вызывает серверное событие bs_core:setLanguage.

Если у resource есть ui_page, скрипт локалей отвечает на NUI-callback bs_i18n объектом { lang, dict } и отправляет новую таблицу при смене языка. Подключи helper и разметь свой HTML:

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

В JS: t('key', vars) и BSI18n.onChange(fn). Подробности в Языках.