GTweak 多语言实战:从区域变体命名到 LocalizeSync 同步的完整上手清单
【免费下载链接】GTweakPortable Tool for an Ideal Windows Setup项目地址: https://gitcode.com/GitHub_Trending/gt/GTweak
第一次给 WPF 项目加翻译,最容易翻车的就是区域变体命名——文件夹名、key、语言名三套写法各不相同。我翻了 GTweak 这个开源 Windows 优化工具的源码后确认:它靠一套统一的本地化目录、一套命名约定加一个同步脚本,就把 14 种语言的维护成本压得很低。这篇按"给 GTweak 新增一种语言"的真实步骤带你走一遍,把区域变体命名、Localize.xaml 的翻译写法和提交前自检一次讲透。
先摸清 GTweak 把翻译藏在哪个目录
GTweak 是一款可绿色免安装的 Windows 优化工具,内置 14 种语言。所有界面文案都集中在一个固定路径下,结构长这样:
.Source/GTweak/Languages/ ├── LanguageCatalog.xaml ← 语言目录:注册每种语言的原生名称 ├── en/Localize.xaml ← 英文基准文件,508 个键值,是所有翻译的对齐标准 ├── pt-BR/Localize.xaml ← 巴西葡萄牙语 ├── zh-CN/Localize.xaml ← 简体中文 └── …(fr、he、ko、ru 等其余语言文件夹)三个文件分工很清楚:
| 文件 | 干什么 |
|---|---|
| en/Localize.xaml | 英文原文,翻译时逐条对照 |
| LanguageCatalog.xaml | 登记每种语言的"原生名 + 英文缩写" |
| 各语言文件夹里的 Localize.xaml | 一语言一文件,只翻译引号里的值 |
这种"一语言一文件夹、一文件夹一文件"的排布,让新增语言几乎零门槛:复制一个文件夹、翻译 508 条字符串、在目录里加一行就行。下面这张是实际运行时的界面,会跟随系统区域设置切换语言。
区域变体命名:三套大小写别搞混
这是我踩坑最多的地方。GTweak 遵循 BCP-47 风格的"语言-地区"写法,但你得同时记住三套不同的写法,它们长得不一样:
- 文件夹名:语言小写、地区大写、中间连字符,如
pt-BR、zh-CN; - 目录 key:全小写、用下划线代替连字符,即
pt-br要写成pt_br、zh-cn写成zh_cn; - 语言显示名:用该语言的原生写法,括号里补英文缩写。
之所以地区必须大写,是因为程序运行时要按地区精确匹配系统区域设置——pt-BR(巴西葡语)和zh-CN(简体中文)、zh-TW(繁体中文)各占一个文件夹,互不覆盖。
注册条目实际长什么样
打开 LanguageCatalog.xaml,文件顶部有一段 NOTE 注释把规则讲得很明白。两个区域变体的真实写法是:
<v:String x:Key="pt_br">Português (BR)</v:String> <v:String x:Key="zh_cn">简体中文 (CN)</v:String>注意口诀:路径里地区大写、key 里全小写下划线。新人最容易把pt-BR直接抄进 key,结果匹配不上。
翻译 Localize.xaml 的三条纪律
以 pt-BR 语言文件 为例,每个Localize.xaml都是标准 WPF 资源字典,条目形如<v:String x:Key="btn_change">Change</v:String>。翻的时候我给自己立了三条硬规矩:
- 只改引号里的值,
x:Key一个字不动。键名是程序和界面之间的契约,改键就等于断了引用,界面会显示空白或默认英文。 - 保留
<!--#region … -->分区注释。基准文件按界面模块分成 15 个区域(Load Window、Main Window、Confidentiality Page、Packages Page……),分区注释能让你对着某个窗口逐块翻译,而不是在一堆字符串里迷路。 - 条数必须对齐。英文基准是 508 键,你的翻译也必须是 508 键——这是提交前最基本的自检项。
#region从Load Window一路排到Toolset Page,与英文基准一一对应,对照翻译时特别顺手。
让 LocalizeSync 脚本帮你兜底
手动维护 14 个文件,迟早会漏。GTweak 在 Tools/ 目录里放了一个本地化同步脚本 LocalizeSync.cmd(本质是一段 PowerShell 脚本),专门用来防止语言"掉队"。
它固定以en/Localize.xaml为基准,对每个语言文件做三件事:
| 能力 | 说明 |
|---|---|
| 键名规范化 | 把Btn-Change这类不规范键名改写成小写下划线btn_change |
| 逐语言差异报告 | 按语言列出新增/删除的键([+] Keys added/[-] Keys deleted)和区域分区 |
| 安全开关 | -DryRun只报告不写盘、-Backup写前备份.bak、-Placeholder给缺失键填空占位符 |
我自己的工作流是:先跑-DryRun看差异清单,确认没有意外后再正式执行让脚本按基准重排结构,全程开-Backup兜底。这样就算误操作,也能靠备份一键回滚。
别忘了根目录的多语言 README
本地化不该只停在程序内部,文档同样按区域变体拆开。仓库根目录为每种语言各备一份 README:
- 巴西葡语:README-pt-br.md
- 简体中文:README-zh-cn.md
- 另有
README-fr.md、README-ko.md、README-ru.md等同规格文档
主 README.md 顶部用语言徽章链接到对应文档,并在「Localization & Translation」章节写明了贡献翻译的两条路——提交 Pull Request 或开 Issue 请求——方便不熟悉 Git 的新手也能上手。
提交前自检清单
动手提交前,对照这份清单逐项打勾,基本能避免被驳回:
- ✅ 文件夹名是「语言-地区」格式(
pt-BR、zh-CN),与 Windows 语言包代码一致 - ✅ LanguageCatalog.xaml 里 key 全小写加下划线(
pt_br、zh_cn),语言名用原生写法 - ✅ Localize.xaml 的键名与英文基准完全一致,只翻译了值
- ✅
#region分区注释完整保留,键数与基准对齐(508 键) - ✅ 跑过 LocalizeSync.cmd 的
-DryRun,确认没有未处理的差异 - ✅ 对应语言的根目录 README 已同步更新
🔧 一句话总结:GTweak 把"统一目录结构 + 区域变体命名规范 + 同步脚本兜底 + 文档本地化"叠成了一层又一层的安全网,把 14 种语言的日常维护成本压到了最低。这套做法对任何想做国际化的 WPF / 桌面应用都能直接借鉴。
【免费下载链接】GTweakPortable Tool for an Ideal Windows Setup项目地址: https://gitcode.com/GitHub_Trending/gt/GTweak
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考