10

此代码适用于英语、西班牙语和德语序数,但对于俄语或意大利语序数则不起作用。

'ru-RU''it-IT'也不行

例如,我在俄语中得到 2 -> два(这是基数),但我想要序数,这将是 2 -> второй。

例如,我用意大利语表示 2 -> due(这是基数),但我想要序数,这将是 2 -> secondo。

更新:

我找到了一个用法语、西班牙、德语和其他一些语言工作的解决方案:

maskuline 序数:%spellout-ordinal-maskuline

女性序数: %spellout-ordinal-feminine

俄语和意大利语版本不起作用,我已经尝试使用 -maskuline/-feminine

$ru_ordinal = new NumberFormatter('ru', NumberFormatter::SPELLOUT);
$ru_ordinal->setTextAttribute(NumberFormatter::DEFAULT_RULESET, "%spellout-ordinal");  
4

2 回答 2

11

NumberFormatter 正在使用 ICU 格式。

你可以在这里查看:http: //saxonica.com/html/documentation/extensibility/config-extend/localizing/ICU-numbering-dates/ICU-numbering.html

...俄语 (ru)具有以下可用格式:

  • 拼写-红衣主教-女性 (scf)
  • 拼写红衣主教男性(scm)
  • 拼写-基数-中性(scne)
  • 拼写编号 (sn)
  • 拼写编号年份 (sny)

...和意大利语(它)

  • 拼写-红衣主教-女性 (scf)
  • 拼写红衣主教男性(scm)
  • 拼写编号 (sn)
  • 拼写编号年份 (sny)
  • spellout-ordinal-feminine (sof)
  • 拼写序数阳性(som)

这就是为什么您将无法为 (ru)和以下代码设置序数格式:

$nFormat = new NumberFormatter('it', NumberFormatter::SPELLOUT);
$nFormat->setTextAttribute(NumberFormatter::DEFAULT_RULESET, "%spellout-ordinal-feminine");

var_dump($nFormat->format(42));

将打印:

string 'quaranta­duesima' (length=17)

就像你(可能)想要的那样。

编辑:

有关使用格式的信息以及对 ICU 的引用:http: //php.net/manual/en/numberformatter.create.php

使用 PHP 5.4.x 和 ICU 版本测试 => 51.2;ICU 数据版本 => 51.2。您可以使用 shell 命令:

$ php -i | grep ICU

检查您拥有的 ICU 版本。

对于最新的 ICU 版本,您应该适当地安装/更新 php-intl 包:http ://php.net/manual/en/intl.installation.php

编辑2:

我已经为 NumberFormatter 创建了扩展名(到目前为止使用波兰语序数)。随意贡献其他语言:https ://github.com/arius86/number-formatter

于 2015-01-10T22:40:18.277 回答
2

只是一个建议,我不确定这是否可行,或者在我上大学的时候是否打开了 Apache 服务,但是你是否尝试过将 ru-RU 用于俄罗斯。在 PHP 中,我个人将我的语言代码设置为“en-GB”

http://download1.parallels.com/SiteBuilder/Windows/docs/3.2/en_US/sitebulder-3.2-win-sdk-localization-pack-creation-guide/30801.htm

这是我在互联网上找到的列表,其中一些可以帮助您。

于 2014-06-18T09:58:02.217 回答