#本地化

recoyx_message_localization

灵活的消息本地化

4个稳定版本

1.1.2 2022年5月25日
1.1.1 2022年5月14日
1.0.1 2022年5月14日

#227 in 国际化(i18n)

Apache-2.0

30KB
500

消息本地化

crates.io docs.rs

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