PHP PECL扩展intl提供瑞典序数的乱码结果

PHP PECL扩展intl提供瑞典序数的乱码结果,php,localization,pecl,intl,numberformatter,Php,Localization,Pecl,Intl,Numberformatter,我正在使用PECL intl模块对PHP项目中的日期和数字进行本地化。在我使用的所有其他语言(40)中,对序数进行本地化很好。然而,在瑞典语中,我得到了奇怪的输出。它似乎是用于生成序号的模板常量 $fnf = new NumberFormatter('sv_FI', NumberFormatter::ORDINAL); echo $fnf->format(1); 及 两者都返回1:e%数字顺序中性点:0:1:avs.类似1st或1er 除了一个bug之外,我唯一的猜测是我缺少了一些额外的

我正在使用PECL intl模块对PHP项目中的日期和数字进行本地化。在我使用的所有其他语言(40)中,对序数进行本地化很好。然而,在瑞典语中,我得到了奇怪的输出。它似乎是用于生成序号的模板常量

$fnf = new NumberFormatter('sv_FI', NumberFormatter::ORDINAL);
echo $fnf->format(1);

两者都返回
1:e%数字顺序中性点:0:1:a
vs.类似
1st
1er


除了一个bug之外,我唯一的猜测是我缺少了一些额外的参数,例如关联动词的性别。

如果输出基于规则的数字格式化程序规则
$fnf->getPattern()

您可以看到,私有规则集
dord mascabbrev
只有一个规则给出该值:

:e%digits-ordinal-neutre:0: 1:a
然后在1之后输出,就像你在问题中描述的那样

这不是PECL INTL中的错误,但底层规则的格式错误,它是ICU库()的一部分。大约三年前,sv数字格式化程序规则被修复为缺少分号,看起来有一行漏掉了

这些规则是从Unicode联盟的CLDR(公共语言环境数据存储库)引入ICU的。我打开了一个,因为除非在CLDR中修复,然后放入ICU,否则它不能和PHP INTL扩展一起工作


另一种方法可能是手动修补ICU库(版本4.8),然后根据修补后的库构建PECL包。

听起来像是个bug,也许可以在PECL开发邮件列表上问一个问题。如果您告诉您正在使用的PHP版本以及使用Suhosin修补程序的module.PHP 5.3.6-13ubuntu3.3的版本,这可能会很有用,intl版本=>1.1.0,ICU版本=>4.4.2。还有我在一年前提交的bug:
%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=;
:e%digits-ordinal-neutre:0: 1:a