首页 > 解决方案 > 如何使用 angular 9 $localize 和复数?

问题描述

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

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

对于打字稿代码中的 i18n。这仍然有一些限制,因为该ng xi18n命令不会检测字符串,但是如果将这些文本手动添加到翻译文件中,它就可以工作。

该函数在源代码中的 JSDoc 中$localize有很好的记录,但是它没有解释如何使用复数形式。我的意思是这样的(伪代码):

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

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

标签: angularangular-i18n

解决方案


目前,无法将 ICU 与.github 问题$localize中讨论的那样使用。从最后的评论来看,如果它保持轻量级,看起来 Angular 团队正在考虑它。

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

    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;
    } 

推荐阅读