4个稳定版本
1.1.2 | 2022年5月25日 |
---|---|
1.1.1 | 2022年5月14日 |
1.0.1 | 2022年5月14日 |
#227 in 国际化(i18n)
30KB
500 行
消息本地化
Rust上灵活本地化的全能包。
特性
MessageLocator
- 从HTTP或文件系统加载资源。
- 通用语言代码和国家代码操作。
Locale
对象和parse_locale(str)
Country
对象和parse_country(str)
入门指南
此示例使用Tokio异步运行时框架,仅用于演示目的。
将以下依赖项添加到Cargo.toml
[dependencies]
recoyx_localization = "1"
maplit = "1.0"
tokio = { version = "1", features = ["full"] }
示例资源位于res/lang/en/_.json
{
"message_id": "Some message",
"parameterized": "Here: $x",
"contextual_male": "Male message",
"contextual_female": "Female message",
"contextual_other": "Other message",
"qty_empty": "Empty ($number)",
"qty_one": "One ($number)",
"qty_multiple": "Multiple ($number)"
}
使用这些资源的示例程序
use recoyx_localization::{
MessageLocator, MessageLocatorOptions, MessageLocatorAssetOptions,
MessageLocatorLoadVia,
localization_vars,
};
use maplit::hashmap;
#[tokio::main]
async fn main() {
let mut msg_locator = MessageLocator::new(
MessageLocatorOptions::new()
// Specify supported locale codes.
// The form in which the locale code appears here
// is a post-component for the assets "src" path.
// For example: "path/to/res/lang/en-US"
.supported_locales(vec!["en", "en-US", "pt-BR"])
.default_locale("en-US")
.fallbacks(hashmap! {
"en-US" => vec!["en"],
"pt-BR" => vec!["en-US"],
})
.assets(MessageLocatorAssetOptions::new()
.src("res/lang")
.base_file_names(vec!["_"])
// "clean_unused" indicates whether to clean previous unused locale data.
.clean_unused(true)
// Specify MessageLocatorLoadVia::FileSystem or MessageLocatorLoadVia::Http
.load_via(MessageLocatorLoadVia::FileSystem))
); // msg_locator
if (!msg_locator.load(None).await) {
// failed to load
}
println!("{}", msg_locator.get("_.message_id"));
println!("{}", msg_locator.get_formatted("_.parameterized", vec![ &localization_vars!{
"x" => "foo"
} ]));
println!("{}", msg_locator.get_formatted("_.contextual", vec![ "female" ]));
}
依赖项
~11–25MB
~446K SLoC