仅替换值发生更改时,如何强制更新翻译的文本?

时间:2018-06-22 21:06:15

标签: angular internationalization

在Angular 4中,我收到一条消息“已选择n个设备”,其中n被替换。邮件已本地化,因此在HTML中看起来像

{{'selected_message' | translate:substitutions }}

其中“ selected_message”在语言文件中具有一个条目:

'selected_message': '{{ndevices}} devices selected.'

replacements.ndevices的值经常更改。但是,当替换替换.ndevices时,转换系统不会重新运行转换,因此该消息始终显示为显示其初始值。如何强制重新运行翻译?

我尝试过的事情:

  • 在组件中制作一个包含“ selected_message”的变量;
  • 将该变量重置为同一事物(“ selected_message”)
  • 将该变量设置为空字符串,然后立即返回“ selected_message”

我该怎么做?

2 个答案:

答案 0 :(得分:1)

我们不应该将可变对象用作管道的输入,因为角度检查对象的引用以检测是否有任何输入发生更改,因此,如果修改了对象的属性,角度将无法识别为新输入。因此,为了避免这种情况,我们可以使用任何形式的不可变数据结构,例如immutableJS或这种情况,如下所示,

  

我们应该在替代对象中设置属性,而不是在replaces.ndevices =“ something”之类的对象中设置属性。

答案 1 :(得分:0)

如果我没记错的话,您会想要一个不偷懒的烟斗。

此调整应能解决问题:

@Pipe({
  name: 'flyingHeroesImpure',
  pure: false
})

您可以在管道上找到更多信息,尤其是在https://angular.io/guide/pipes上的纯净和不纯净的管道上

或者,使用可观察变量为模板中的异步管道提供数据流,以确保您的html保持最新。