Skip to content

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:

shared/config/core.lua
config.lang = GetConvar("bupa-chat:locale", GetConvar("ox:locale", "en"))

Порядок определения:

  1. bupa-chat:locale — переопределение для конкретного ресурса (только для BUPA Chat).
  2. ox:locale — общий язык ox_lib, используемый на всем сервере.
  3. en — английский язык по умолчанию, если ничего из вышеперечисленного не задано.
server.cfg
setr ox:locale "tr"          # язык для всего сервера
setr bupa-chat:locale "en"   # опционально: принудительный английский только для чата

Смена языка на лету — bupa:changeLanguage

Вы можете изменить язык игрока в реальном времени, за сессию, без перезапуска. Вызовите клиентское событие с кодом языка; BUPA Chat перезагрузит этот файл локализации через ox_lib и сразу передаст его в React UI:

client
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.

locales/en.json
{
  "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").