如果您输出基于规则的数字格式化程序规则$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
只有一个规则给出该值:
:e%digits-ordinal-neutre:0: 1:a
就像您在问题中描述的那样,您将在 1 之后输出。
这不是 PECL INTL 中的错误,但底层规则格式错误,它是 ICU 库的一部分(那里的规则)。大约三年前,sv 数字格式化程序规则针对丢失的分号进行了修复,看起来有一行漏掉了。
这些规则从 Unicode Consortium 的 CLDR(通用区域设置数据存储库)引入 ICU。我在那里打开了一个错误报告,因为除非在 CLDR 中修复此问题,然后放入 ICU,否则它无法与 PHP INTL 扩展一起使用。
另一种方法可能是手动修补 ICU 库(版本 4.8),然后针对已修补的库构建 PECL 包。