message-locator
Localization for message assets. This library uses language-objects for working with language data.
Usage
Add this to Cargo.toml
:
[dependencies]
message-locator = "1"
maplit = "1.0"
tokio = { version = "1", features = ["full"] }
Example asset located at 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)"
}
Example code:
use message_locator::{
MessageLocator, MessageLocatorOptions, MessageLocatorAssetOptions,
MessageLocatorLoadMethod,
locator_vars,
};
use maplit::hashmap;
#[tokio::main]
async fn main() {
let mut msg_locator = MessageLocator::new(
MessageLocatorOptions::new()
.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(true)
.load_method(MessageLocatorLoadMethod::FileSystem))
);
if !msg_locator.load(None).await {
return;
}
println!("{}", msg_locator.get("_.message_id"));
println!("{}", msg_locator.get_formatted("_.parameterized", vec![ &locator_vars!{
"x" => "foo"
} ]));
println!("{}", msg_locator.get_formatted("_.contextual", vec![ &"female" ]));
}