2 个不稳定版本

0.1.0 2019 年 10 月 10 日
0.0.3 2019 年 10 月 10 日

#234国际化(i18n)

24 每月下载次数

MIT/Apache

14KB
167

区域

LICENSE Crates.io Version Coverage Status Build Status

Rust 中一个简单的编译时国际化实现。如果翻译键不存在,则会抛出编译错误,但由于 lang 参数是动态的,如果匹配的键没有添加对应的语言,则会导致 panic。

API 文档 https://crates.io/crates/locales

用法

在您的应用中某处(应用根目录、src 目录等)创建一个 locales/ 文件夹,其中包含 .json 文件,可以是嵌套的。它使用 glob 模式:**/locales/**/*.json 来匹配您的翻译文件。

文件应如下所示

{
  "err.user.not_found": {
    "fr": "Utilisateur introuvable: $email, $id",
    "en": "User not found: $email, $id"
  },
  "err.answer.all": {
    "fr": "Échec lors de la récupération des réponses",
    "en": "Failed to retrieve answers"
  },
  "err.answer.delete.failed": {
    "fr": "Échec lors de la suppression de la réponse",
    "en": "Failed to delete answer"
  }
}

可以添加任意数量的语言,但您应该为所有内容提供它们,因为当查询键时找不到语言会导致 panic。

在您的应用中,只需调用 t!

use locales::t;

fn main() {
    let lang = "en";
    let res = t!("err.not_allowed", lang);

    assert_eq!("You are not allowed to do this", res);
}

您可以使用插值,任意数量的参数都可以,但请注意,它们必须按字母顺序排序。要使用变量,请像这样调用 t!

use locales::t;

fn main() {
    let lang = "en";
    let res = t!("err.user.not_found", email: "me@localhost", id: "1", lang);

    assert_eq!("User not found: me@localhost, ID: 1", res);
}

安装

Locales 可在 crates.io 上找到,将其包含在您的 Cargo.toml

[dependencies]
locales = "0.1.0"

然后将其包含在您的代码中,如下所示

#[macro_use]
extern crate locales;

或在您想使用宏的地方使用它

use locales::t;

注意

如果没有在编译时设置 PWD 环境变量,Locales 将无法工作。

无运行时依赖

~0–430KB