存在 locales/ 目录且有 translation.json,说明软件使用了 Vue + i18next 的国际化方案。每种语言一个文件夹,里面是一个 translation.json。
这是 en/translation.json 的结构:
[
{ "id": "Add", "content": "Add" },
{ "id": "Save", "content": "Save" }
]
很标准的 i18n 格式。id 是代码中的 key,content 是显示文本。汉化的本质就是——翻译 content 字段。
二、编写翻译脚本
1404 条文本,不可能手动翻译。写了一个 Python 脚本,核心是一个翻译字典 trans_map:
trans_map = {
"Add": "添加",
"Save": "保存",
"CAP Average (Dakar)": "平均 CAP(达喀尔)",
# ... 共 1418 条映射
}
翻译脚本逻辑非常简单:
for item in data:
translated = trans_map.get(item["content"], item["content"]) # 找不到则保留原文
output.append({"id": item["id"], "content": translated})
不过这里有一个坑——不认识的条目会保留英文。所以需要反复运行检查未翻译列表,逐步补全字典。
最终结果:1404 条中翻译了 1358 条(96.7%),保留原文 39 条(主要是品牌名 RallySafe、TerraPirata、文件格式 PDF/CSV/KML 等)。
三、部署汉化
将翻译文件放到 locales/zh-CN/ 下,启动软件。在 System and Menu Language 菜单中——没有中文选项。
说明语言列表是硬编码的,不在 JSON 文件中。
四、修改 app.asar
解包 app.asar 查找语言列表。在 Webpack 打包后的 JS 中找到关键代码:
const M = ["en","fr","pt","ar","es","lt","de","el-GR","it","pl","ru","ja"]
果然没有中文。添加 "zh-Hans-CN",同时修复 Chromium locale 映射 "zh-Hans-CN":"zh-CN"。
重新打包——又出问题了。一开始用 asarPy(pip 安装的 asar 库)打包,但打包格式和 Electron 官方 @electron/asar 不兼容,生成的 asar 文件损坏。改用官方工具:
npx @electron/asar pack app_temp app.asar
这次打包成功了,JS 补丁也正确应用。但启动软件——语言列表中依然没有中文。
五、最终方案——替换立陶宛语
经过分析发现,语言列表不仅出现在一个地方,Webpack 打包时将模块 ID 9bbb 的语言列表也注入了 app.js 的多处位置。还有一个 loadPath: "locales/${lang}/translation.json" 的配置,只加载列表中已有的语言。
替换现有小众语言。
立陶宛语(lt)正好是小众语言,把它替换成中文:
# 备份立陶宛语原文
Copy-Item "lt\translation.json" "lt\translation.json.lt.bak"
# 用中文覆盖
Copy-Item "zh-Hans-CN\translation.json" "lt\translation.json" -Force
启动软件 → 选择 Lietuviškai(立陶宛语) → 中文界面出来了。
不需要修改 app.asar,不需要重新打包,零风险。
六、最终成果
汉化覆盖面:
| 类别 |
示例 |
| 菜单栏 |
文件、编辑、视图、帮助、窗口 |
| 拉力赛术语 |
CAP、航点、路书、行程表、控制点 |
| 地形与道路 |
沙丘、岩石、涉水、柏油路、碎石 |
| 对话框 |
警告、确认、错误消息、保存提示 |
| PDF 导出 |
路书 PDF、行程表、安全计划 |
| 设置项 |
语言、主题、地图、GPS、键盘快捷键 |
统计:
- 总条目:1404 条
- 已翻译:1358 条(96.7%)
- 保留原文:39 条(品牌名、格式名)
- 翻译文件大小:109 KB
七、使用方法
直接下载汉化包
从附件下载 translation.json,放到软件目录 resources/locales/lt/ 覆盖原文件。然后启动软件,在 System and Menu Language 中选择 Lietuviškai。
还原方法:
删除 lt/translation.json,将同目录下的 .bak 文件重命名回去。
八、注意事项
- 软件更新会覆盖
resources/ 目录,更新后重新部署即可
- 选择 Lietuviškai 后界面变中文,但菜单名不会变(这是 Electron 应用内建的硬编码)
- 如果有少量术语翻译不准确,可以自行编辑
trans_map.py 后重新生成
如果觉得有用,免费的评分支持一下,谢谢!🙏