Localization
Локализация
BUPA Chat полностью переводится. Переводы представляют собой обычные JSON-файлы в директории locales/, которые загружаются через ox_lib (в манифесте указано ox_lib 'locale') и считываются с помощью обертки t().
Доступные языки
locales/*.json — десять языков «из коробки»:
| Код | Язык | Код | Язык |
|---|---|---|---|
en |
Английский | nl |
Нидерландский |
tr |
Турецкий | pl |
Польский |
de |
Немецкий | pt |
Португальский |
es |
Испанский | ru |
Русский |
fr |
Французский | it |
Итальянский |
Каждая строка интерфейса, название категории, плейсхолдер, описание анимации и системное сообщение берутся из этих файлов.
Выбор языка
Активный язык задается в shared/config/core.lua:
config.lang = GetConvar("bupa-chat:locale", GetConvar("ox:locale", "en"))Порядок определения:
bupa-chat:locale— переопределение для конкретного ресурса (только для BUPA Chat).ox:locale— общий язык ox_lib, используемый на всем сервере.en— английский язык по умолчанию, если ничего из вышеперечисленного не задано.
setr ox:locale "tr" # язык для всего сервера
setr bupa-chat:locale "en" # опционально: принудительный английский только для чатаСмена языка на лету — bupa:changeLanguage
Вы можете изменить язык игрока в реальном времени, за сессию, без перезапуска. Вызовите клиентское событие с кодом языка; BUPA Chat перезагрузит этот файл локализации через ox_lib и сразу передаст его в React UI:
TriggerEvent("bupa:changeLanguage", "de")Внутри это вызывает loadLang(newLang) (что меняет активный язык ox_lib), а затем changeUiLang, благодаря чему и Lua-часть, и интерфейс обновляются одновременно.
Добавление или изменение языка
Директория locales/ находится в escrow_ignore, поэтому вы можете редактировать JSON напрямую. Чтобы добавить язык, скопируйте en.json, переведите значения и сохраните файл как <code>.json (например, sv.json), а затем укажите этот код в ox:locale или bupa-chat:locale.
{
"CATEGORY_COMMANDS_LABEL": "Commands",
"CATEGORY_COMMANDS_PLACEHOLDER": "Type a command...",
"CATEGORY_ADMIN_LABEL": "Admin Chat",
"EMOTE_ME_COMMAND_DESC": "Describe an action you are doing"
}Функция t() (и locale() в ox_lib) возвращает сам ключ, если перевод отсутствует. Поддерживайте полноту файла en.json в качестве эталона и используйте плейсхолдеры %s / %d для динамических значений (например, "Reason: %s").