NumberFormatter::SPELLOUT在俄语和意大利语中的序数拼写。

11

这段代码可以处理英语、西班牙语和德语的序数,但无法处理俄语或意大利语的序数。

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

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

例如,在意大利语中,我得到了2 -> due(这是基数),但我想要序数,这里应该是2 -> secondo。

更新:

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

男性序数: %spellout-ordinal-maskuline

女性序数: %spellout-ordinal-feminine

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

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

1
在编程中,42的序数称为“сорок второй”(俄语),在西班牙语中为“cuadragésimo segundo”,在意大利语中为“quarantaduesimo”。 - Grischa
@Rizier123 如何显示序号?我只在寻找俄语和意大利语的序数解决方案。 - Grischa
1
@Rizier123 我想要俄语和意大利语的序数词,以你的示例为例,应该是“second”。我只想翻译这个数字! - Grischa
1
@Rizier123 在意大利语中,我得到的是2 -> due而不是2 -> secondo - Grischa
让我们在聊天中继续这个讨论:(http://chat.stackoverflow.com/rooms/68568/discussion-between-grischa-and-rizier123)。 - Grischa
显示剩余6条评论
2个回答

12

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)
  • spellout-numbering (sn)
  • spellout-numbering-year (sny)

…而意大利语 (it)中可用以下格式:

  • spellout-cardinal-feminine (scf)
  • spellout-cardinal-masculine (scm)
  • spellout-numbering (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


谢谢。不幸的是,我的主机最近只更新到了PHP 5.4和ICU 4.4.1。我已经在http://phpfiddle.org/上检查了您的代码,在那里我得到了基数而不是序数。 - Grischa
Phpfiddle使用PHP 5.3.29。我在5.4.12上进行了测试。我添加了一些额外的参考资料。我认为这结束了这个话题,实际上现在没有其他答案,所以希望您将其标记为已接受。最好的祝愿! - Arius
谢谢你的帮助,但我已经知道了额外的参考资料。它也不能在5.4.36-1上工作。这个PHP版本是我网站使用的。 - Grischa
这是一个在我的服务器上运行的工作示例:http://private.arius.pl/test/example.php?number=12 - 您可以根据需要更改数字。请更新您的服务器语言环境以获得正确的意大利值。 - Arius
你能展示给我 example.php 的代码吗,就像 example.phps 那样?我不知道是否可以更改我的服务器语言环境。我没有使用自己的服务器。使用 %spellout-ordinal-maskuline 而不是 %spellout-ordinal-feminine 也可以吗? - Grischa
显示剩余3条评论

2

谢谢,但我也尝试过 ru-RU 和 fr-FR 用于法语,es-ES 用于西班牙语,it-IT 用于意大利语,只有英语和德语有效。 - Grischa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接