4 个版本 (2 个稳定版)
1.0.1 | 2024年7月22日 |
---|---|
0.1.1 | 2024年7月20日 |
0.1.0 | 2024年7月10日 |
#41 在 国际化 (i18n)
每月455 次下载
41KB
725 行
Yew translator
使用字符串模板的 yew 国际化实现。
基于 Yew I18n,此实现略有不同,并利用了字符串模板。
特性
默认情况下,所有特性都启用。
yew-i18n
使用 yew-i18n
特性允许您使用为 yew
制作的 i18n
组件。
handlebars
使用 handlebars
与 yew-i18n
特性一起使用,允许您使用 yew-i18n
与 handlebars
实现一起使用。
translation_templater
使用 translation_templater
与 yew-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中一样(某些字段名称可能会有所不同)。
默认情况下,en
和fr
位于字段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时,使用thb
和thb_register
方法(对于thb_register
,您将能够注入自己的Handlebars
注册表,来自tbh
的注册表是空的)。
依赖项
~2.8–6.5MB
~130K SLoC