#localization #intl

immortal_intl_rs

一个简单的 Rust 国际化库

3 个版本 (破坏性更新)

0.3.0 2024年6月15日
0.2.0 2024年6月15日
0.1.0 2024年4月11日

#141 in 国际化 (i18n)

Download history 7/week @ 2024-05-18 2/week @ 2024-05-25 2/week @ 2024-06-01 3/week @ 2024-06-08 257/week @ 2024-06-15 8/week @ 2024-06-22

每月115次下载
immortal_axum_utils 中使用

MIT 许可证

10KB
135

中文文档

一个简单的 Rust 国际化库

配置

  1. 默认语言文件位于 src/languages 目录下,您可以通过环境变量 INTL_RS_RESOURCES 来修改它
  2. 默认地区(default_locale 属性)是 zh_CN,您可以通过环境变量 INTL_RS_DEFAULT_LANG 来修改它

配置文件

仅支持 json 文件,例如 en_US.json,如下所示

{
  "hello": {
    "world": "Hello,World!",
    "somebody": "Hello,{{name}}!"
  }
}

用法

    fn i18n_can_format_messages() {
        env::set_var("INTL_RS_RESOURCES", "languages");
        let key = "hello.world";
        assert_eq!(t!(key), "你好,世界!");

        assert_eq!(
            t!("unknown key", default:"default message"),
            "default message"
        );

        //default to ensure fallback
        //and you can disable it by disable_fallback function
        let configs = I18nConfig {
            fallback: None,
            locale: Some("en".to_owned()),
            null_placeholder: None,
            args: None,
        };
        assert_eq!(t!(key, configs: configs), "Hello,World!");

        let configs = I18nConfig {
            fallback: Some(true),
            locale: Some("en_UK".to_owned()),
            null_placeholder: None,
            args: None,
        };
        assert_eq!(t!(key, configs: configs), "Hello,World!");

        //change the default null placeholder
        let configs = I18nConfig {
            fallback: Some(true),
            locale: Some("en_UK".to_owned()),
            null_placeholder: Some("".to_owned()),
            args: None,
        };
        assert_eq!(t!("unknown key", configs: configs), "");
        //render template
        let mut args: HashMap<&str, &str> = HashMap::new();
        args.insert("name", "Donald Trump");

        let configs = I18nConfig {
            fallback: Some(true),
            locale: Some("en_UK".to_owned()),
            null_placeholder: Some("".to_owned()),
            args: Some(args.clone()),
        };
        assert_eq!(
            t!("hello.somebody", configs: configs),
            "Hello,Donald Trump!"
        );

        assert_eq!(
            t!("unknown key",default:"Hey,{{name}}!", args: args.clone()),
            "Hey,Donald Trump!"
        );

        let mut args: HashMap<&str, &str> = HashMap::new();
        args.insert("name", "唐纳德·川普");
        assert_eq!(
            t!("hello.somebody", args: args.clone()),
            "你好,唐纳德·川普!"
        );
    }

依赖项

~2.7–4MB
~74K SLoC