ルールベースの数値フォーマッタ rules を出力する場合$fnf->getPattern()
:
%digits-ordinal-masculine:
0: =#,##0==%%dord-mascabbrev=;
-x: −>%digits-ordinal-masculine>;
%%dord-mascabbrev:
0: :e%digits-ordinal-neutre:0: =%digits-ordinal-feminine=;
%digits-ordinal-reale:
0: =%digits-ordinal-feminine=;
%digits-ordinal-feminine:
0: =#,##0==%%dord-femabbrev=;
-x: −>%digits-ordinal-feminine>;
%%dord-femabbrev:
0: :e;
1: :a;
2: :a;
3: :e;
20: >%%dord-femabbrev>;
100: >%%dord-femabbrev>;
%digits-ordinal:
0: =%digits-ordinal-masculine=;
dord-mascabbrev
プライベート ルール セットには、その値を与えるルールが 1 つしかないことがわかります。
:e%digits-ordinal-neutre:0: 1:a
質問で説明したように、1の後に出力します。
これは PECL INTL のバグではありませんが、ICU ライブラリの一部である基本的なルールの形式が正しくありません (そのルールがあります)。約 3 年前に、sv 数値フォーマッタのルールでセミコロンの欠落が修正されました。1 行抜けていたようです。
これらのルールは、Unicode コンソーシアムの CLDR (Common Locale Data Repository) から ICU に取り込まれます。これは CLDR で修正されてから ICU に入れられない限り、PHP INTL 拡張では動作しないため、そこでバグ レポートを開きました。
別の方法として、ICU ライブラリ (バージョン 4.8) に手動でパッチを適用し、パッチを適用したライブラリに対して PECL パッケージをビルドすることもできます。