i18n - 国际化支持#
支持的语言#
| 代码 | 语言 | 文件 |
|---|---|---|
| en | English | locales/en.json |
| zh-CN | 简体中文 | locales/zh-CN.json |
| zh-TW | 繁体中文 | locales/zh-TW.json |
| fr | Français | locales/fr.json |
| de | Deutsch | locales/de.json |
| ja | 日本語 | locales/ja.json |
| ko | 한국어 | locales/ko.json |
语言检测#
程序按以下优先级检测语言:
- 环境变量
I_LANG(用户强制指定) - 系统语言
LC_ALL/LC_MESSAGES/LANG - 默认 英文 (en)
示例#
bash
# 使用中文
export I_LANG=zh-CN
i
# 使用日文
export LANG=ja_JP.UTF-8
i回退机制#
text
请求语言 (zh-HK)
↓
locales/zh-HK.json (不存在)
↓
locales/zh-TW.json (繁体中文通用)
↓
locales/zh-CN.json (简体中文)
↓
locales/en.json (英文兜底)
↓
编译时嵌入的 en.json (最终保障)贡献翻译#
1. 复制模板#
bash
cp locales/en.json locales/xx.json # xx 为语言代码2. 翻译内容#
json
{
"welcome": "Your translation here",
"setup.title": "Your translation",
...
}3. 测试#
bash
export I_LANG=xx
i4. 提交 PR#
将 locales/xx.json 提交到项目仓库。
格式说明#
占位符#
使用 {} 或 {0}, {1} 表示动态内容:
json
{
"install.prompt": "Install i to {}?",
"error.file_not_found": "File not found: {}"
}代码中使用:
rust
i18n.tf("install.prompt", &["/usr/local/bin"])
// 输出:Install i to /usr/local/bin?键名规范#
- 使用小写字母和点号分隔:
setup.title - 相关功能使用相同前缀:
install.*,setup.*,error.* - 通用按钮:
common.yes,common.no
开发说明#
内置兜底#
即使 locales/ 目录不存在,程序也能运行:
en.json在编译时嵌入二进制文件- 始终有英文翻译可用
添加新语言#
- 创建
locales/xx.json - 在
i18n.rs的resolve_locale()中添加回退规则(如需要) - 测试并运行
- 提交 PR
修改翻译#
直接编辑对应的 JSON 文件,重新编译即可生效。
文件结构#
text
locales/
├── en.json # English (embedded fallback)
── zh-CN.json # 简体中文
├── zh-TW.json # 繁體中文
├── fr.json # Français
├── de.json # Deutsch
├── ja.json # 日本語
└── ko.json # 한국어许可证#
翻译文件与项目主代码使用相同许可证 (MIT)。