aurelia - 首选的 Aurelia i18n 本地化模板用法是什么?

标签 aurelia i18next

我是 Aurelia 的新手,但到目前为止我真的很喜欢它。但是,在某些方面仍然缺乏文档,例如使用 i18n 插件进行本地化。

我设置了语言文件 (translation.json) 并将语言文本标签插入到 HTML 模板中,但我看到了两种不同的格式。我已经成功地完成了这两项工作,但我不知道每一项的优点和缺点,所以我犹豫是否要 promise 更新我的所有模板,除非我知道哪个是最好的以及为什么。

locales/en/translation.json

{
  "hello": "Hello, World!",
  "lang_msg": "This message is in English."
}

locales/es/translation.json

{
  "hello": "¡Hola, Mundo!",
  "lang_msg": "Este mensaje está en español."
}

模板格式 1:

<template>
  <h1>${ 'hello' | t }</h1>
  <h2>${ 'lang_msg' | t }</h2>
</template>

模板格式 2:

<template>
  <h1><span t="hello"></span></h1>
  <h2><span t="lang_msg"></span></h2>
</template>

我应该使用模板格式 1 还是 2?为什么?

最佳答案

它归结为对现有标记的扩展感觉最“自然”,从长远来看侵入性最小/最易于维护。这取决于您的应用程序结构。

在功能上存在一些差异,这些差异对您来说可能重要也可能不重要,但除此之外主要是主观的。

格式2(html属性)

这种方法更加语义化,使国际化成为您标记中的一等公民。如果您需要的不仅仅是简单的单变量转换,那么与必须组合 ViewModel 的代码并将这些变量传递给绑定(bind)管道相比,这可能会产生更易读/​​可维护的代码。

来自文档:

嵌套和组合翻译:

<span t="$t(title) $t(subtitle)">Title subtitle</span>

<span t="nested_referencing">Nested text</span>

参数化属性:

<span t="[html]paramstest" t-params.bind="params"></span>

对于以内容为中心的应用程序(如 CMS)或您可能会使用这些内容的应用程序(如促销网站)的输出,这可能是首选方法。

格式 1 (TValueConverter)

虽然主观,但我认为 ${ variable | t }是更具声明性/更少侵入性的方法。你是说“我有这个现有的标记,我要在上面添加国际化”。

TValueConverter 方法只会导致更少的代码,这是可维护性的论据。

唯一的缺点是,例如,当区域设置更改时,它不会自动更新。

可以通过 TBindingBehavior 方法克服:

格式“3”(TBindingBehavior)

用法和TValueConverter完全一样,只需要改成| t即可至 & t .这将在外部发生更改时自动更新,您可以选择使用 BindingSignaler 手动更新绑定(bind)。

BindingBehaviors 本质上比 ValueConverter 更灵活(但实现起来也更复杂)。我真的没有理由使用 | t& t从消费者的角度来看,编写的代码量相同,但提供的功能更丰富。

我希望这能回答您的问题。

关于aurelia - 首选的 Aurelia i18n 本地化模板用法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39989482/

相关文章:

javascript - Aurelia js授权

typescript - 为什么 View 不是在 Aurelia 生产构建模式下创建的

aurelia - 安装 aurelia-materialize 桥

javascript - 如何使用变量作为 i18next 的键?

javascript - Aurelia 上带有 json 文件的箭头函数

jquery - 如何正确本地化kendo mobile中的字符串?

next.js - 如何在 next.js 中管理国际化路由以使用斜线而不是破折号

javascript - Reactjs。从服务器获取数据并将其连接到 i18n

javascript - 使用 i18next 和 Storybook 进行 Jest 测试

Aurelia - 没有由computeFrom 装饰器引用的嵌套数组的ModifyCollectionObserver?