MessageFormatでSelectを使用して
-
12-12-2019 - |
質問
messageformat (Expectionの一部)PHPで使用しています。拡張子はICU 4.6.1を使用します。
しかし、問題はPHPにはありません。
最初のトークンintl
:
-
{0}
が{0}
の場合、テキストは0
にする必要があります。
-
a
の場合、テキストは1
にする必要があります。
- 他のすべての場合には、テキストは
b
にする必要があります。
これは、c
ケースのplural
、=0
で行うことができることを理解していますが、私のテストでは機能していないようです。
私は、0
を使用してそれを達成しようとしています:
{0, select, 0 {a} other {{0,plural,one{b}other{c}}}}
.
しかし、何らかの理由で、メッセージフォーマッタは上記をフォーマットできず、select
(フォーマットできませんでした)。
なぜこれはなぜですか?構文に問題がありますか?
クイックアップデート:ある掘削後、選択した値を数字で一致させることができないようです。この回りの方法はありますか?
もう1つの更新:ICU 49.1.2およびfalse
3.0.0A2に更新されました。これでintl
、=0
などを使用できますが、これは動作を停止しました(以前に機能していました):
{0}{0, plural, one{a} other{b}}
.
ここではどこにあります:
{0, plural, one{a} other{b}}
. 解決
intl
とICU 49.1.2の最新バージョンへのアップグレードを終了しました。
しかし、それが完了したら、これはうまくいきません:
{0}{0, plural, one{a} other{b}}
.
しかしこれは次のように動作しました:
{0, plural, =0{a} one{# b} other {# c}}
. 他のヒント
select
引数型は正確な文字列の一致です。文字列引数値を渡していることを確認する必要があります。その後、一致する句があります。各ロケールがone
を意味するための独自の規則を持っているので、正確なケースマッチングのための複数形を使用しないでください。
次のはあなたに望むものを与えるべきですが、私はPHPの実装よりも形式についてはるかに知っています。
MessageFormatter::formatMessage($locale,
'{0, select, _0 {a} _1 {b} other {c}}',
array( "_$value" ))
. 所属していません StackOverflow