如何使用i18n转换成角度的自定义管道?

时间:2019-04-02 13:48:19

标签: angular localization internationalization

我正在使用i18n翻译我的Angular 7应用,并且我具有生成文本的自定义管道。如何翻译管道产生的文字?

我坚持使用angular文档提供的i18n guideline,我使用此xliff merge strategy进行开发,并使用this tutorial进行每个语言环境的构建。

例如,我正在尝试翻译将数字转换为文本的time ago pipe

目前我还不知道如何翻译自定义管道。我只知道如何使用i18n属性来翻译html标签,该属性似乎不适用于我使用的自定义管道。

angular i18n paragraph建议在主app.module.ts中设置某种全局变量,但示例有点稀少,而且(a)我不知道如何根据按照我在this tutorial之后的操作,按照每种语言进行构建,(b)我不知道如何将全局语言环境导入我的自定义管道,并且(c)是否有可能在{{1 }}文件而不是管道中的文件?

1 个答案:

答案 0 :(得分:1)

通常,在这种情况下,您可以做的是将translateService作为依赖项添加到管道中,然后从代码中进行翻译。

因此,管道中的构造函数如下:

constructor(private changeDetectorRef: ChangeDetectorRef, private ngZone: NgZone, private tr: TranslateService) {}

在转换函数中,您可以使用以下命令返回文本值:

// [...]
} else if (days <= 545) {
  return this.tr.instant('time.one-year-ago');
} else { // (days > 545)
  return this.tr.instant('time.years-ago', { years });
}
// [...]