lninl/ i

i18n - 国际化支持#

支持的语言#

代码语言文件
enEnglishlocales/en.json
zh-CN简体中文locales/zh-CN.json
zh-TW繁体中文locales/zh-TW.json
frFrançaislocales/fr.json
deDeutschlocales/de.json
ja日本語locales/ja.json
ko한국어locales/ko.json

语言检测#

程序按以下优先级检测语言:

  1. 环境变量 I_LANG (用户强制指定)
  2. 系统语言 LC_ALL / LC_MESSAGES / LANG
  3. 默认 英文 (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
i

4. 提交 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 在编译时嵌入二进制文件
  • 始终有英文翻译可用

添加新语言#

  1. 创建 locales/xx.json
  2. 在 i18n.rs 的 resolve_locale() 中添加回退规则(如需要)
  3. 测试并运行
  4. 提交 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)。