4个版本
0.1.3 | 2021年6月10日 |
---|---|
0.1.2 | 2021年6月7日 |
0.1.1 | 2021年6月5日 |
0.1.0 | 2021年6月3日 |
在#地域标签下排名第65
每月下载26次
用于simple-i18n
15KB
344 行
i18n-rs
Rust中简单的编译时国际化实现。
这是一个个人项目。如果您需要一个稳定且强大的国际化库,您可能需要fluent。
如果您认为这个crate不易使用,我找到了另一个类似的crate:https://github.com/terry90/internationalization-rs
使用
在crates.io上,这个包的名称是simple-i18n
,因为i18n-rs
的名称已被一个空crate占用。真糟糕...
将simple-i18n = "0.1"
添加到Cargo.toml
示例
cd examples/i18n-example
LOCALE_PATH=locale cargo run --package i18n-example --bin i18n-example
文档
i18n-rs将在编译期间将您的地域文件(toml、json或yaml)加载到代码中。然后您可以使用lang!
(切换地域)并使用i18n
获取文本。
LOCALE_PATH
使用LOCALE_PATH
环境变量来查找您的地域文件。
请注意,因为依赖库无法在编译期间获取您实际运行构建命令的当前路径,因此最安全的方法实际上是用绝对路径。
通常我们将地域文件存储在项目根目录下的locale
目录中,并将LOCALE_PATH
设置为locale
。
当前的行为是
i18n-rs 将在
${workspace_root}/$LOCALE_PATH
中查找OUT_DIR
或./
,使用cargo metadata
来完成。
换句话说,如果
LOCALE_PATH
是一个相对路径,它应该基于项目的 workspace_root,而不是用户的当前路径。
最好在项目根目录中运行构建命令。
区域文件
区域文件支持 json
、toml
、yaml
。
您可以使用单个文件或使用一个文件夹。如果是单个文件,则语言代码是文件名。
如果是文件夹,则文件夹名是语言代码,子文件夹和文件名将被用作字段名。
您可以在文件名前添加 .
来避免其成为字段名。
内容将被扁平化,键将与 .
一起链接,成为字段名。
示例
{
"words": {
"greetings": {
"hi": "Hi!"
}
}
}
equal
{
"words.greetings.hi": "Hi!"
}
严格与宽松
默认情况下,将使用严格检查。
在宽松模式下,如果您尝试获取不存在的字段或不存在的区域,将返回该字段本身。
但严格模式将检查您的输入在 lang!
和 i18n!
中,以确保您使用的是现有的区域和所有区域中存在的字段。
如果存在错误,将引发 panic!
。
不用担心,所有这些都在编译时进行检查,因此严格检查几乎不会影响运行时性能,并且运行时不会引发 panic。
注意:因为它需要在编译时进行检查,所以严格模式下必须使用字符串字面量。
幸运的是,我们可以自由地在宽松模式和严格模式之间切换。例如 i18n!("xxx.x"; loose)
。
基准测试
strict contrast/no strict
time: [29.048 ns 29.387 ns 29.736 ns]
change: [-15.897% -13.053% -10.253%] (p = 0.00 < 0.05)
Performance has improved.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild
strict contrast/strict time: [29.108 ns 29.431 ns 29.776 ns]
change: [-2.6412% -0.8426% +1.0984%] (p = 0.38 > 0.05)
No change in performance detected.
Found 4 outliers among 100 measurements (4.00%)
2 (2.00%) high mild
2 (2.00%) high severe
change_lang time: [148.38 ns 159.76 ns 178.01 ns]
change: [+0.4039% +4.5240% +10.326%] (p = 0.05 > 0.05)
No change in performance detected.
Found 5 outliers among 100 measurements (5.00%)
3 (3.00%) high mild
2 (2.00%) high severe
依赖项
~4MB
~89K SLoC