web-dev-qa-db-ja.com

angular 9 $ localizeを複数形で使用するには?

Angular 9なので、

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

TypeScriptコードのi18nの場合。 ng xi18nコマンドは文字列を検出しないため、これにはいくつかの制限がありますが、これらのテキストが手動で翻訳ファイルに追加された場合は機能します。

$localize関数は ソースのJSDoc で十分に文書化されていますが、複数形での作業方法は説明されていません。私が意味するのは次のようなものです(疑似コード):

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

これは$localizeで可能ですか?はいの場合:方法は?いいえの場合:Angularでは、このような式をHTMLからTypeScriptにどのようにコンパイルしますか?

10
yankee

現時点では、この githubの問題 で説明されているように、$localizeでICUを使用することはできません。最後のコメントから、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;
    } 
2
David

私は問題を読んだばかりです https://github.com/angular/angular/issues/35912 そして私はそれを考えていますintl-messageformatは必要なことを実行できます。

https://github.com/formatjs/formatjs/tree/master/packages/intl-messageformat を参照してください。

2
kemsky