i18n — 语言包
两种能力,别混:
- 整包语言包(
type: "i18n"):把整个界面翻译成一个新语种- 插件自包含词条(
locales/,任何类型插件都可用):只翻译你自己的插件
1. 整包语言包(type: "i18n")
json
{
"id": "example.i18n.japanese",
"name": "日本語 UI 言語パック",
"version": "1.0.0",
"target_app_version": "0.2",
"author": "TransBox",
"type": "i18n",
"language_code": "ja-JP",
"language_name": "日本語",
"entrypoint": "ja.json"
}ja.json是扁平键值字典({"settings.title": "設定", ...})。- 缺失的词条回退顺序:
en-US→zh-CN。 - 语言包互斥(同一时间只有一个界面语言)。
- 默认
enabled: false。 - 启用后立即切换界面语言;停用则安全回退。
参照:extensions/example_i18n_japanese/。
2. 插件自包含词条 locales/(推荐所有插件都做)
任何类型的插件(assistant / theme / tool…)都可以在插件根目录提供:
text
my_plugin/
├── locales/
│ ├── zh-CN.json # 文件名 → 语言代码
│ └── en-US.jsonjson
{
"_meta": {
"plugin_id": "community.assistant.interview_copilot",
"code": "zh-CN",
"name": "中文 (简体)",
"short_label": "中"
},
"plugin.community.assistant.interview_copilot.name": "AI 面试答题助手",
"plugin.community.assistant.interview_copilot.desc": "……",
"plugin.community.assistant.interview_copilot.tab_title": "AI 面试助手",
"copilot.title": "AI 面试答题助手",
"copilot.stealth_shield": "防录屏保护"
}规则:
- 宿主扫描时自动探测挂载,无需代码。
- 用户切换语言时按
目标语言 → 插件 en-US → 插件 zh-CN顺序优雅合并。 _meta是元数据块(plugin_id/code/name/short_label),不会被当成词条。- 保留前缀
plugin.<plugin_id>.name/.desc/.tab_title:插件在工坊列表和设置 Tab 上的显示名/描述/标题会跟着语言走。 - 其余键(如
copilot.*)是你自己的命名空间,自由用。 - QML 里用
I18n.t("copilot.title")读取;设置 Tab 标题(tab_title)自动响应。
严禁修改主程序核心词库(
src/transbox/ui/locales/*.json)——语言包与插件词条都是 增量覆盖,不是替换。
自检
- [ ]
locales/下至少zh-CN.json与en-US.json - [ ] 词条前缀不与其它插件撞(用
plugin.<plugin_id>.*或自己的命名空间) - [ ] 切到英文界面,插件卡片名/描述/设置页文案全部变英文,没有中文残留
相关
- glossary 术语库 — 术语库是「翻译专用词表」,不是界面翻译
- 目录结构与 mod.json
- 示例库
