angular 9 $ localizeを複数形で使用するにはどうすればよいですか?


9

Angular 9以降は使用できます

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

typescriptコードの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>か?それはドキュメントにあります。あなたが望むもの
デイブ牧師

@DavePastor:はい、試しました。私は今の質問でそれを変更しました。それにもかかわらず、それは私が達成したいことを説明するための疑似コードです。
ヤンキー

@DavePastor:(2番目のコメントに関して):いいえ、これは役に立ちません。これはHTMLであり、TypeScriptではありません。
ヤンキー

TS側でこれを処理する必要があります。とった。
デイブ牧師

回答:


2

今のところ、$localizeこのgithubの問題で説明されているように、でICUを使用することはできません。最後のコメントから、それが軽量のままであるならば、角のあるチームはそれを考慮しているようです。

一方、推奨される回避策は、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;
    } 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.