2 个版本
0.1.1 | 2023年7月28日 |
---|---|
0.1.0 | 2023年7月7日 |
#161 in 国际化 (i18n)
11KB
137 行
easy i18n
一个 easy i18n 工具
示例
use easy_i18n::{self, i18n, I18N};
use std::path::Path;
// set source
easy_i18n::set_source(Path::new("./src/source"));
// set lang
easy_i18n::set_lang("EN");
i18n!("这是一个测试"); // This is a test
// Sometimes, the same text has different translation results in different contexts. At this time, we can set different namespaces
i18n!("这是一个测试", ns="namespace1"); // This is a test, but it is different
// If there is a dynamic value in the text, we can use %1, %2, %3.. as a placeholder, where the number represents the position of the dynamic value
i18n!("他的成绩是,语文:%1, 数学:%2", 88, 100); // His grades are Chinese: 88, Mathematics: 100
// If you have different translation results in other contexts, you can set the namespace
i18n!("他的成绩是,语文:%1, 数学:%2", ns="namespace1", 88, 100); // His grades are Chinese: 88, Mathematics: 100, and the test is not bad.
source 目录包含一些翻译文本及其对应的翻译结果
your_project
|--src
|--source
|-- cn.json
|-- en.json
|-- de.json
每个 json 文件的格式如下,必需的 common
字段,可选的 namespace
字段表示不同的上下文
{
"common": {
"这是一个测试": "This is a test",
...
}
}
如果相同的文本在不同的上下文中有不同的翻译结果,可以在 json 文件中添加 namespace
,例如,en.json
的内容是
{
"common": {
"这是一个测试": "This is a test"
},
"namespace1": {
"这是一个测试": "This is a test, but it is different"
},
"other_ns": {
"这是一个测试": "This is a test, haha!"
}
}
然后只需传入相应的 namespace
,例如
i18n!("这是一个测试"); // This is a test
i18n!("这是一个测试", ns="namespace1"); // This is a test, but it is different
i18n!("这是一个测试", ns="other_ns"); // This is a test, haha!
如果文本包含动态值,可以使用 %1
,%2
作为占位符,其中 1、2 表示动态值的位置,从 1 开始,例如,en.json
的内容是
{
"common": {
"这是一个测试": "This is a test",
"他的成绩是,语文:%1, 数学:%2": "His grades are Chinese: %1, Mathematics: %2"
}
}
使用方法:
i18n!("他的成绩是,语文:%1, 数学:%2", 88, 100); // His grades are Chinese: 88, Mathematics: 100
当动态值和 namesapce
同时存在时,namespace
放在动态值之前,例如,en.json
的内容是
{
"common": {
"这是一个测试": "This is a test",
"他的成绩是,语文:%1, 数学:%2": "His grades are Chinese: %1, Mathematics: %2"
},
"ns":{
"他的成绩是,语文:%1, 数学:%2": "His grades are Chinese: %1, Mathematics: %2, and the test is not bad."
}
}
i18n!("他的成绩是,语文:%1, 数学:%2", ns="ns", 88, 100); // His grades are Chinese: 88, Mathematics: 100, and the test is not bad.
依赖
~3–5MB
~91K SLoC