1

PHP でMessageFormat (intl拡張機能の一部)を使用しています。拡張機能は ICU 4.6.1 を使用します。

ただし、問題は PHP にはありません。

最初のトークンを決定して、文字列の一部をフォーマットしたいと思います{0}

  • {0}がの場合0、テキストはa
  • の場合1、テキストはb
  • 他のすべてのケースでは、テキストはc

pluralこれは, =0forケースで実行できることは理解してい0ますが、私のテストではうまくいかないようです。これはおそらく、オフセットとカスタムの複数形が 4.8 で導入されたためです。

したがって、次を使用してそれを達成しようとしていselectます:

{0, select, 0 {a} other {{0,plural,one{b}other{c}}}}

しかし、何らかの理由で、メッセージ フォーマッタは上記をフォーマットできず、返されましたfalse(フォーマットできませんでした)。

これはなぜですか?構文に問題はありますか?


クイック更新: 掘り下げた後、select を使用して数字で始まる値を一致させることはできないようです。これを回避する方法はありますか?

別の更新: ICU 49.1.2 およびintl3.0.0a2 に更新されました。=0、などを使用できるようになり=1ましたが、これは機能しなくなりました (以前は機能していました):

{0}{0, plural, one{a} other{b}}

これが機能する場所:

{0, plural, one{a} other{b}}
4

2 に答える 2

2

intl最終的に ICU 49.1.2の最新バージョンにアップグレードしました。

ただし、それが完了すると、これは機能しません。

{0}{0, plural, one{a} other{b}}

しかし、これはうまくいきました:

{0, plural, =0{a} one{# b} other {# c}}
于 2012-07-27T12:29:55.443 に答える