1 个不稳定版本
0.1.0 | 2021年6月3日 |
---|
#195 在 国际化(i18n)
被 2 个包 使用
3KB
i18n-rs
一个简单的Rust编译时国际化实现。
这是一个个人项目。如果您需要稳定且功能强大的国际化库,您可能需要 fluent。
如果您认为这个包不好用,我找到了另一个类似的包: https://github.com/terry90/internationalization-rs
使用
在crates.io上,这个包的名字是 simple-i18n
,因为 i18n-rs
的名字已被一个空包占用。...
将 simple-i18n = "0.1"
添加到 Cargo.toml
示例
查看 i18n-example
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 将在
OUT_DIR
或./
中查找${workspace_root}/$LOCALE_PATH
,使用cargo metadata
。
换句话说,如果
LOCALE_PATH
是相对路径,它应该基于项目的 workspace_root,而不是用户的当前路径。
最好在项目根目录下运行构建命令。
区域文件
区域文件支持 json
、toml
、yaml
。
可以使用单个文件或使用文件夹。如果是单个文件,语言代码是文件名。
如果是文件夹,文件夹名是语言代码,子文件夹和文件名将用作字段名。
可以在文件名前添加 .
以避免成为字段名。
内容将被展平,键将与 .
连接起来成为字段名。
示例
{
"words": {
"greetings": {
"hi": "Hi!"
}
}
}
相等
{
"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