如何使用角度9 $ localize复数?


9

从Angular 9开始,我们可以使用

$localize`Hello ${name}:name:`

对于打字稿代码中的i18n。由于该ng xi18n命令无法检测到字符串,因此仍有一些限制,但是如果将这些文本手动添加到翻译文件中,它将起作用。

$localize函数在JSDoc的源代码中有很好的文档说明,但是并未解释如何使用复数形式。我的意思是这样的(伪代码):

$localize`Hello {${count}, plural, =1 {reader} other {readers}}`

这可能$localize吗?如果是:如何?如果否:Angular如何将此类表达式从HTML编译为TypeScript?


这对您有帮助吗<span i18n>Updated {minutes, plural, =0 {just now} =1 {one minute ago} other {{{minutes}} minutes ago}}</span>?多数民众赞成在文档中。与您想要的内容非常相似
Dave Pastor

@DavePastor:是的,我尝试过。我现在在问题中对此进行了更改。尽管如此,它只是伪代码,只是为了说明我想要实现的目标。
美国人

@DavePastor :(关于第二条评论):不,这没有帮助。这是HTML,不是TypeScript。
洋基

好的,因此您想在TS端进行处理。得到它了。
Dave Pastor

Answers:


2

到目前为止,无法将ICU与一起使用$localize,如本github问题中所述。从最后的评论来看,如果轻量级的话,似乎Angular团队正在考虑它。

同时,建议的解决方法是创建自己的帮助程序方法,该方法根据count参数返回正确的翻译。

    title = $localize `Hi ${this.name}! You have ${
        plural(this.users.length. {
          0: $localize `no users`,
          1: $localize `one user`,
          other: $localize`${this.users.length} users`,
    }.`

    function plural(value, options) {
      // Handle 0, 1, ... cases
      const directResult = options[value];
      if (directResult !== undefined) { return directResult; }
      // handle zero, one, two, few, many
      // ...
      return options.other;
    } 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.