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 中进行解析:
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 端和 UI 端同时完成更新。
添加或编辑语言
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()(以及 ox_lib 的 locale())会返回键名本身。请保持 en.json 完整作为参考基准,并使用 %s / %d 占位符来处理动态数值(例如 "Reason: %s")。