4 个版本 (2 个稳定版)

1.0.1 2024年7月22日
0.1.1 2024年7月20日
0.1.0 2024年7月10日

#41国际化 (i18n)

Download history 114/week @ 2024-07-10 253/week @ 2024-07-17 83/week @ 2024-07-24 5/week @ 2024-07-31

每月455 次下载

MIT/Apache

41KB
725

Yew translator

使用字符串模板的 yew 国际化实现。

基于 Yew I18n,此实现略有不同,并利用了字符串模板。

特性

默认情况下,所有特性都启用。

yew-i18n

使用 yew-i18n 特性允许您使用为 yew 制作的 i18n 组件。

handlebars

使用 handlebarsyew-i18n 特性一起使用,允许您使用 yew-i18nhandlebars 实现一起使用。

translation_templater

使用 translation_templateryew-i18n 特性一起使用,允许您使用 yew-i18n 与自定义模板器实现一起使用。

export_translation_templater

使用 export_translation_templater 允许您从 i18n 的实现中独立使用自定义模板器。

i18n

翻译模板器

翻译模板器是为此 yew-i18n 实现专门编写的自定义模板器。如果您不使用 handlebars 特性,这将默认使用。

如何使用

当在您的项目中导入 yew_translator 时,请考虑仅使用 yew-i18n 如下所示

[dependencies]
yew_translator = { version = "1.0", default-features = false, features = ["yew-i18n", "translation_templater"] }

这允许您删除除您需要之外的所有访问权限,除非您想为 yew 之外的其他东西创建自己的 i18n(在这种情况下,如果您想删除 yew-i18n 特性并从该包中删除 yew,您将可以仅使用具有 export_translation_templater 特性的解析器)。

现在,创建您的 yew 组件并在其中初始化您的 i18n

use yew_translator::*;
...
let supported_languages = vec!["en", "fr"];
let mut translations: HashMap<String, serde_json::Value> = HashMap::new(); // Import your own translations (language -> transation JSON)
html!(
  <I18nProvider {supported_languages} {translations}>
    <WhateverYouWant />
  </I18nProvider>
)

最后,在子组件中,使用钩子use_translation()来处理翻译,就像在Yew I18n中一样(某些字段名称可能会有所不同)。

默认情况下,enfr位于字段supported_languages中,但您可以插入自己的语言代码来更改此设置。对于字段translations,您必须有一个包含与您的翻译关联的语言的JSON的hashmap。最后,您可以使用字段current_language来设置由i18n使用的默认语言。默认情况下,current_language被设置为en

JSON翻译

您可以使用点表示法来标记子访问(甚至在数组上),使用系统key: value编写您的JSON。例如:

{
  "root": {
    "child_a": ["elem_0", "elem_1", "elem_2", {
      "name": "Janne"
    }],
    "child_b": {
      "first_name": "John",
      "last_name": "Doe",
      "age": 25
    }
  }
}

您将获得以下所有路径

  • root.child_a.0
  • root.child_a.1
  • root.child_a.2
  • root.child_a.3.name
  • root.child_b.first_name
  • root.child_b.last_name
  • root.child_b.age

模板和数据

遵循yew-i18n使用的t方法,您将找到方法tt,在其中您将放置您想要的关键值,并将数据插入从该键找到的模板中。现在,您将所有值视为模板,您将能够在模板中执行一些注入。语法如下

  • {{data_field_name}}:在模板中注入您的数据中的值。(无需解析)
  • {{*data_field_name}}:使用您的数据值作为翻译的键来注入其值。(无需解析)
  • {{{translation_field_name}}}:使用您的翻译键的值来注入其模板,强制您也注入所需值。(解析发生)
  • {{{*data_field_name}}}:使用您的数据值作为翻译的键来注入其模板,强制您也注入所需值。(解析发生)
  • {{{**data_field_name}}}:使用您的数据值作为翻译的模板,有助于使用引用创建动态模板。(解析发生)

以下是一些需要遵循的规则

  • 符号`\`后面跟着`{`、`}`或`\`将始终转义下一个字符,使得`\`在输出中忽略。
  • 在解析键名时,符号\后跟*会导致输出字符*
  • 转义*符号只在紧接在{{{{{之后才有效。
  • 您可以在其他模板内部拥有任意数量的模板,但请注意无限循环的问题。

Handlebars

如果您之前还没有听说过,请查看handlebars仓库以了解更多信息。

如何使用

当在您的项目中导入 yew_translator 时,请考虑仅使用 yew-i18n 如下所示

[dependencies]
yew_translator = { version = "1.0", default-features = false, features = ["yew-i18n", "handlebars"] }

在使用handlebars时,使用thbthb_register方法(对于thb_register,您将能够注入自己的Handlebars注册表,来自tbh的注册表是空的)。

依赖项

~2.8–6.5MB
~130K SLoC