NumberFormatter :: SPELLOUT spellout-ordinal in Russian and italian

时间:2014-06-18 09:47:46

标签: php icu intl numberformatter

此代码适用于英语,西班牙语和德语的ordninal号码,但俄语或意大利语版本号不起作用。

'ru-RU''it-IT'也无效

我以俄语为例2 - > два(这是基数),但我想要序号,这将是2 - > второй。

我在意大利语中得到2 - >到期(这是基数),但我想要序数,这将是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");  

2 个答案:

答案 0 :(得分:11)

NumberFormatter正在使用ICU格式。

您可以在此处查看:http://saxonica.com/html/documentation/extensibility/config-extend/localizing/ICU-numbering-dates/ICU-numbering.html

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

  • spellout-cardinal-feminine(scf)
  • spellout-cardinal-masculine(scm)
  • spellout-cardinal-neuter(scne)
  • 拼写编号(sn)
  • spellout-numbering-year(sny)

... 意大利语(it)

  • spellout-cardinal-feminine(scf)
  • spellout-cardinal-masculine(scm)
  • 拼写编号(sn)
  • spellout-numbering-year(sny)
  • spellout-ordinal-feminine(sof)
  • spellout-ordinal-masculine(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

答案 1 :(得分: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

以下是我在互联网上找到的一些帮助您的列表。