5 stable releases

1.3.1 Nov 15, 2022
1.2.1 Nov 15, 2022
1.0.0 Nov 5, 2022

#23 in #rialight

ISC license

30KB
538 lines

rialight::localization

LocaleBundle

To use LocaleBundle, add these dependencies to Cargo.toml:

[dependencies]
rialight_localization = "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 usage:

use rialight_localization::{
    LocaleBundle, LocaleBundleOptions, LocaleBundleOptionsForAssets,
    LocaleBundleLoadMethod,
    bundle_vars,
};
use maplit::hashmap;

#[tokio::main]
async fn main() {
    let mut bundle = LocaleBundle::new(
        LocaleBundleOptions::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", "pt-BR"])
            .default_locale("en-US")
            .fallbacks(hashmap! {
                "pt-BR" => vec!["en-US"],
            })
            .assets(LocaleBundleOptionsForAssets::new()
                .src("res/lang")
                .base_file_names(vec!["_"])
                // "clean_unused" indicates whether to clean previous unused locale data. 
                .clean_unused(true)
                // Specify LocaleBundleLoadMethod::FileSystem or LocaleBundleLoadMethod::Http
                .load_method(LocaleBundleLoadMethod::FileSystem))
    ); // bundle

    if !bundle.load(None).await {
        // failed to load
        return;
    }

    println!("{}", bundle.get("_.message_id"));
    println!("{}", bundle.get_formatted("_.parameterized", vec![ &bundle_vars!{
        "x" => "foo"
    } ]));
    println!("{}", bundle.get_formatted("_.contextual", vec![ &"female" ]));
}

Dependencies

~10–23MB
~335K SLoC