rust-i18n是一个用于 Rust 的国际化i18n库它的核心目标是让文本本地化变得简单和易用。它的 API 设计灵感来自 Ruby 的ruby-i18n和 Rails 框架的 I18n 模块。 支持的翻译文件格式rust-i18n支持三种主流的配置文件格式你可以根据项目需求选择最适合的一种或混合使用1. YAML (.yml / .yaml)特点最常用作为默认推荐格式文档示例最丰富可读性强使用缩进表示层级结构清晰直观支持锚点和别名可以复用重复的翻译片段无需引号纯文本可以直接书写无需额外标点示例locales/en.ymlen:common:save:saveSave# 定义锚点cancel:Cancelusers:title:Users Listsave:*save# 引用锚点2. JSON (.json)特点生态兼容与前端工具链和Web服务无缝对接严格结构强制使用花括号和引号避免格式错误工具支持有大量的JSON编辑器和格式化工具易于自动化适合CI/CD流程自动处理示例locales/en.json{en:{common:{save:Save,cancel:Cancel},users:{title:Users List}}}3. TOML (.toml)特点Rust原生语法与Rust的类型系统风格一致显式层级使用点号和表头明确表示层级关系类型明确天然支持字符串、整数、布尔等类型注释支持可以用#添加注释便于团队协作示例locales/en.toml[en] title My App # 应用标题 [en.common] save Save cancel Cancel [en.users] title Users List 三种格式的特点对比特性YAMLJSONTOML可读性⭐⭐⭐ 最佳缩进清晰⭐⭐ 一般括号较多⭐⭐⭐ 很好结构明确简洁度⭐⭐⭐ 最简洁无需引号⭐ 较冗余需要引号和逗号⭐⭐ 中等需要表头注释支持⭐⭐ 支持 (#)❌ 不支持⭐⭐⭐ 支持 (#)复用能力⭐⭐⭐ 支持锚点和别名❌ 不支持复用❌ 不支持复用工具生态⭐⭐ 较好⭐⭐⭐ 最好⭐⭐ 较好Rust风格⭐⭐ 一般⭐⭐ 一般⭐⭐⭐ 最匹配编辑友好⭐⭐ 缩进敏感⭐⭐⭐ 自动格式化⭐⭐⭐ 结构明确 核心理念与特点编译时加载翻译文件如 YAML、JSON、TOML在编译时就被加载并直接包含到二进制文件中。这意味着在程序运行时翻译文本的获取速度极快且不依赖外部文件。简单的t!宏提供了一个全局可用的t!宏你可以在代码的任何地方通过一个键名来获取翻译后的字符串使用起来非常直观。灵活的翻译文件支持两种组织翻译文件的方式你可以根据项目需求选择按语言拆分每种语言一个独立的文件如en.yml,zh-CN.yml适合传统的翻译工作流。集中管理将所有语言的翻译放在同一个文件中如app.yml利用 AI如 GitHub Copilot自动填充其他语言的翻译。强大的辅助工具提供了一个cargo i18n命令行工具可以自动扫描你的 Rust 源码提取出所有使用t!宏但尚未翻译的文本并生成待翻译的文件极大地简化了本地化流程。丰富的现代特性支持带参数的翻译如Hello, %{name}、多级语言回退机制如zh-CN找不到时自动找zh、可插拔的自定义后端以及为超长文本生成短键以优化内存等功能。 快速上手在Cargo.toml中添加依赖[dependencies] rust-i18n 3在项目根目录创建locales文件夹并放入翻译文件例如locales/en.ymlen:hello:Hello, World!greet:Hello, %{name}!在你的 Rust 代码中初始化和使用// 初始化指定翻译文件路径rust_i18n::i18n!(locales);userust_i18n::t;fnmain(){// 设置全局语言rust_i18n::set_locale(en);println!({},t!(hello));// 输出: Hello, World!println!({},t!(greet,nameRust));// 输出: Hello, Rust!// 也可以在调用时临时指定语言println!({},t!(hello,localezh-CN));// 假设有中文翻译则会输出对应中文} 如何选择个人项目/快速原型推荐YAML书写最快无需引号团队协作/大型项目推荐TOML注释明确结构清晰前后端分离/API集成推荐JSON与其他系统交互最方便需要翻译复用只能选择YAML因为它支持锚点无论选择哪种格式rust-i18n都提供一致的 API 和工具链支持你可以随时切换格式而无需修改代码逻辑。如果你正在寻找一种无额外依赖、能够将翻译直接嵌入二进制并且希望有配套工具链来简化翻译管理的 Rust 国际化方案rust-i18n是一个值得考虑的选项。