【rust-i18n】简介

rust-i18n 是一个用于 Rust 的国际化(i18n)库,它的核心目标是让文本本地化变得简单易用 。它的 API 设计灵感来自 Ruby 的 ruby-i18n 和 Rails 框架的 I18n 模块。

📁 支持的翻译文件格式

rust-i18n 支持三种主流的配置文件格式,你可以根据项目需求选择最适合的一种或混合使用:

1. YAML (.yml / .yaml)

特点:

  • 最常用:作为默认推荐格式,文档示例最丰富
  • 可读性强:使用缩进表示层级,结构清晰直观
  • 支持锚点和别名:可以复用重复的翻译片段
  • 无需引号:纯文本可以直接书写,无需额外标点

示例 locales/en.yml

yaml 复制代码
en:
  common:
    save: &save Save  # 定义锚点
    cancel: Cancel
  users:
    title: Users List
    save: *save  # 引用锚点

2. JSON (.json)

特点:

  • 生态兼容:与前端工具链和Web服务无缝对接
  • 严格结构:强制使用花括号和引号,避免格式错误
  • 工具支持:有大量的JSON编辑器和格式化工具
  • 易于自动化:适合CI/CD流程自动处理

示例 locales/en.json

json 复制代码
{
  "en": {
    "common": {
      "save": "Save",
      "cancel": "Cancel"
    },
    "users": {
      "title": "Users List"
    }
  }
}

3. TOML (.toml)

特点:

  • Rust原生:语法与Rust的类型系统风格一致
  • 显式层级:使用点号和表头明确表示层级关系
  • 类型明确:天然支持字符串、整数、布尔等类型
  • 注释支持:可以用#添加注释,便于团队协作

示例 locales/en.toml

toml 复制代码
[en]
title = "My App"  # 应用标题

[en.common]
save = "Save"
cancel = "Cancel"

[en.users]
title = "Users List"

🔄 三种格式的特点对比

特性 YAML JSON TOML
可读性 ⭐⭐⭐ 最佳,缩进清晰 ⭐⭐ 一般,括号较多 ⭐⭐⭐ 很好,结构明确
简洁度 ⭐⭐⭐ 最简洁,无需引号 ⭐ 较冗余,需要引号和逗号 ⭐⭐ 中等,需要表头
注释支持 ⭐⭐ 支持 (#) ❌ 不支持 ⭐⭐⭐ 支持 (#)
复用能力 ⭐⭐⭐ 支持锚点和别名 ❌ 不支持复用 ❌ 不支持复用
工具生态 ⭐⭐ 较好 ⭐⭐⭐ 最好 ⭐⭐ 较好
Rust风格 ⭐⭐ 一般 ⭐⭐ 一般 ⭐⭐⭐ 最匹配
编辑友好 ⭐⭐ 缩进敏感 ⭐⭐⭐ 自动格式化 ⭐⭐⭐ 结构明确

🚀 核心理念与特点

  • 编译时加载:翻译文件(如 YAML、JSON、TOML)在编译时就被加载并直接包含到二进制文件中。这意味着在程序运行时,翻译文本的获取速度极快,且不依赖外部文件。
  • 简单的 t! :提供了一个全局可用的 t! 宏,你可以在代码的任何地方通过一个键名来获取翻译后的字符串,使用起来非常直观。
  • 灵活的翻译文件 :支持两种组织翻译文件的方式,你可以根据项目需求选择:
    1. 按语言拆分 :每种语言一个独立的文件(如 en.yml, zh-CN.yml),适合传统的翻译工作流。
    2. 集中管理 :将所有语言的翻译放在同一个文件中(如 app.yml),利用 AI(如 GitHub Copilot)自动填充其他语言的翻译。
  • 强大的辅助工具 :提供了一个 cargo i18n 命令行工具,可以自动扫描你的 Rust 源码,提取出所有使用 t! 宏但尚未翻译的文本,并生成待翻译的文件,极大地简化了本地化流程。
  • 丰富的现代特性 :支持带参数的翻译(如 Hello, %{name})、多级语言回退机制(如 zh-CN 找不到时自动找 zh)、可插拔的自定义后端,以及为超长文本生成短键以优化内存等功能。

💡 快速上手

Cargo.toml 中添加依赖:

toml 复制代码
[dependencies]
rust-i18n = "3"

在项目根目录创建 locales 文件夹,并放入翻译文件,例如 locales/en.yml

yaml 复制代码
en:
  hello: "Hello, World!"
  greet: "Hello, %{name}!"

在你的 Rust 代码中初始化和使用:

rust 复制代码
// 初始化,指定翻译文件路径
rust_i18n::i18n!("locales");

use rust_i18n::t;

fn main() {
    // 设置全局语言
    rust_i18n::set_locale("en");

    println!("{}", t!("hello")); // 输出: Hello, World!
    println!("{}", t!("greet", name = "Rust")); // 输出: Hello, Rust!

    // 也可以在调用时临时指定语言
    println!("{}", t!("hello", locale = "zh-CN")); // 假设有中文翻译,则会输出对应中文
}

🎯 如何选择?

  • 个人项目/快速原型 :推荐 YAML,书写最快,无需引号
  • 团队协作/大型项目 :推荐 TOML,注释明确,结构清晰
  • 前后端分离/API集成 :推荐 JSON,与其他系统交互最方便
  • 需要翻译复用 :只能选择 YAML,因为它支持锚点

无论选择哪种格式,rust-i18n 都提供一致的 API 和工具链支持,你可以随时切换格式而无需修改代码逻辑。

如果你正在寻找一种无额外依赖、能够将翻译直接嵌入二进制,并且希望有配套工具链来简化翻译管理的 Rust 国际化方案,rust-i18n 是一个值得考虑的选项。

相关推荐
鸿乃江边鸟3 小时前
Spark Datafusion Comet 向量化Rust Native--Native算子ScanExec以及涉及到的Selection Vectors
大数据·rust·spark·arrow
Hello.Reader3 小时前
Tauri 用“系统 WebView + 原生能力”构建更小更快的跨平台应用
rust·tauri
RoyLin1 天前
Rust 编写的 40MB 大小 MicroVM 运行时,完美替代 Docker 作为 AI Agent Sandbox
后端·架构·rust
班公湖里洗过脚1 天前
《通过例子学Rust》第20章 标准库更多介绍
rust
班公湖里洗过脚1 天前
《通过例子学Rust》第21章 测试
rust
班公湖里洗过脚2 天前
《通过例子学Rust》第19章 标准库类型
rust
键盘鼓手苏苏2 天前
Flutter for OpenHarmony:git 纯 Dart 实现的 Git 操作库(在应用内实现版本控制) 深度解析与鸿蒙适配指南
开发语言·git·flutter·华为·rust·自动化·harmonyos
初恋叫萱萱2 天前
基于 Rust 与 DeepSeek V3.2 构建高性能插件化 LLM 应用框架深度解析
网络·人工智能·rust
码农葫芦侠2 天前
Rust学习教程2:基本语法
开发语言·学习·rust