All-in-one package for flexible localization on Rust.
Features:
LocaleMap
Locale
and parse_locale(str)
Country
and parse_country(str)
Notes:
This example uses the Tokio asynchronous runtime framework, solely for demonstrative purposes.
Add the following dependencies to Cargo.toml:
toml
[dependencies]
recoyx_localization = "1"
maplit = "1.0"
tokio = { version = "1", features = ["full"] }
Example asset located at path/to/res/lang/en/common.json
:
json
{
"message_id": "Some message",
"parameterized": "Here: $x",
"contextual_male": "Male message",
"contextual_female": "Female message",
"qty_empty": "Empty ($number)",
"qty_one": "One ($number)",
"qty_multiple": "Multiple ($number)"
}
Example program using these assets:
```rust use recoyxlocalization::{ LocaleMap, LocaleMapOptions, LocaleMapAssetOptions, Gender, LocaleMapLoaderType, localizationvars, }; use maplit::hashmap;
async fn main() { let mut localemap = LocaleMap::new( LocaleMapOptions::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(LocaleMapAssetOptions::new() .src("path/to/res/lang") .basefilenames(vec!["common", "validation"]) // "autoclean" indicates whether to clean previous unused locale data. .autoclean(true) // Specify LocaleMapLoaderType::FileSystem or LocaleMapLoaderType::Http .loadertype(LocaleMapLoaderType::FileSystem)) ); // localemap localemap.load(None).await;
println!("{}", locale_map.get("common.message_id"));
println!("{}", locale_map.get_formatted("common.parameterized", vec![ &localization_vars!{
"x" => "foo"
} ]));
println!("{}", locale_map.get_formatted("common.contextual", vec![ &Gender::Female ]));
for i in 0..3 {
println!("{}", locale_map.get_formatted("common.qty", vec![ &i ]));
}
} ```