Skip to content

Localization

本地化

BUPA Chat 支持完全本地化。翻译文件为存放在 locales/ 目录下的纯 JSON 文件,由 ox_lib 加载(清单中声明了 ox_lib 'locale'),并通过 t() 包装函数进行读取。

内置语言

locales/*.json — 开箱即用支持十种语言:

代码 语言 代码 语言
en 英语 nl 荷兰语
tr 土耳其语 pl 波兰语
de 德语 pt 葡萄牙语
es 西班牙语 ru 俄语
fr 法语 it 意大利语

所有的 UI 文本、分类标签、占位符、动作(emote)描述以及系统消息均解析自这些文件。

选择语言

当前生效的语言在 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 端和 UI 端同时完成更新。

添加或编辑语言

locales/ 包含在 escrow_ignore 中,因此你可以直接编辑其中的 JSON 文件。若要添加新语言,只需复制 en.json,翻译其中的键值,并将其保存为 <code>.json(例如 sv.json),然后将 ox:localebupa-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()(以及 ox_lib 的 locale())会返回键名本身。请保持 en.json 完整作为参考基准,并使用 %s / %d 占位符来处理动态数值(例如 "Reason: %s")。