質問

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" ))
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top