2 个不稳定版本
0.1.0 | 2019 年 10 月 10 日 |
---|---|
0.0.3 | 2019 年 10 月 10 日 |
#234 在 国际化(i18n)
24 每月下载次数
14KB
167 行
区域
Rust 中一个简单的编译时国际化实现。如果翻译键不存在,则会抛出编译错误,但由于 lang
参数是动态的,如果匹配的键没有添加对应的语言,则会导致 panic。
用法
在您的应用中某处(应用根目录、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