Localization for message assets. This library uses language-objects for working with language data.
Add this to Cargo.toml
:
toml
[dependencies]
message-locator = "1"
maplit = "1.0"
tokio = { version = "1", features = ["full"] }
Example asset located at res/lang/en/_.json
:
rust
{
"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:
```rust use messagelocator::{ MessageLocator, MessageLocatorOptions, MessageLocatorAssetOptions, MessageLocatorLoadMethod, locatorvars, }; use maplit::hashmap;
async fn main() { let mut msglocator = 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" .supportedlocales(vec!["en", "en-US", "pt-BR"]) .defaultlocale("en-US") .fallbacks(hashmap! { "en-US" => vec!["en"], "pt-BR" => vec!["en-US"], }) .assets(MessageLocatorAssetOptions::new() .src("res/lang") .basefilenames(vec![""]) // "cleanunused" indicates whether to clean previous unused locale data. .cleanunused(true) // Specify MessageLocatorLoadMethod::FileSystem or MessageLocatorLoadMethod::Http .loadmethod(MessageLocatorLoadMethod::FileSystem)) ); // msglocator
if !msg_locator.load(None).await {
// failed to load
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" ]));
} ```