3 个版本 (破坏性更新)
0.3.0 | 2024年6月15日 |
---|---|
0.2.0 | 2024年6月15日 |
0.1.0 | 2024年4月11日 |
#141 in 国际化 (i18n)
每月115次下载
在 immortal_axum_utils 中使用
10KB
135 行
一个简单的 Rust 国际化库
配置
- 默认语言文件位于
src/languages
目录下,您可以通过环境变量INTL_RS_RESOURCES
来修改它 - 默认地区(default_locale 属性)是
zh_CN
,您可以通过环境变量INTL_RS_DEFAULT_LANG
来修改它
配置文件
仅支持 json 文件,例如 en_US.json
,如下所示
{
"hello": {
"world": "Hello,World!",
"somebody": "Hello,{{name}}!"
}
}
用法
fn i18n_can_format_messages() {
env::set_var("INTL_RS_RESOURCES", "languages");
let key = "hello.world";
assert_eq!(t!(key), "你好,世界!");
assert_eq!(
t!("unknown key", default:"default message"),
"default message"
);
//default to ensure fallback
//and you can disable it by disable_fallback function
let configs = I18nConfig {
fallback: None,
locale: Some("en".to_owned()),
null_placeholder: None,
args: None,
};
assert_eq!(t!(key, configs: configs), "Hello,World!");
let configs = I18nConfig {
fallback: Some(true),
locale: Some("en_UK".to_owned()),
null_placeholder: None,
args: None,
};
assert_eq!(t!(key, configs: configs), "Hello,World!");
//change the default null placeholder
let configs = I18nConfig {
fallback: Some(true),
locale: Some("en_UK".to_owned()),
null_placeholder: Some("".to_owned()),
args: None,
};
assert_eq!(t!("unknown key", configs: configs), "");
//render template
let mut args: HashMap<&str, &str> = HashMap::new();
args.insert("name", "Donald Trump");
let configs = I18nConfig {
fallback: Some(true),
locale: Some("en_UK".to_owned()),
null_placeholder: Some("".to_owned()),
args: Some(args.clone()),
};
assert_eq!(
t!("hello.somebody", configs: configs),
"Hello,Donald Trump!"
);
assert_eq!(
t!("unknown key",default:"Hey,{{name}}!", args: args.clone()),
"Hey,Donald Trump!"
);
let mut args: HashMap<&str, &str> = HashMap::new();
args.insert("name", "唐纳德·川普");
assert_eq!(
t!("hello.somebody", args: args.clone()),
"你好,唐纳德·川普!"
);
}
依赖项
~2.7–4MB
~74K SLoC