Angular 9なので、
$localize`Hello ${name}:name:`
TypeScriptコードのi18nの場合。 ng xi18n
コマンドは文字列を検出しないため、これにはいくつかの制限がありますが、これらのテキストが手動で翻訳ファイルに追加された場合は機能します。
$localize
関数は ソースのJSDoc で十分に文書化されていますが、複数形での作業方法は説明されていません。私が意味するのは次のようなものです(疑似コード):
$localize`Hello {${count}, plural, =1 {reader} other {readers}}`
これは$localize
で可能ですか?はいの場合:方法は?いいえの場合:Angularでは、このような式をHTMLからTypeScriptにどのようにコンパイルしますか?
現時点では、この 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;
}
私は問題を読んだばかりです https://github.com/angular/angular/issues/35912 そして私はそれを考えていますintl-messageformat
は必要なことを実行できます。
https://github.com/formatjs/formatjs/tree/master/packages/intl-messageformat を参照してください。