如何将基数转换为序数
有没有一种简单的方法可以将数字1、2、3,...转换为" 1st"," 2nd"," 3rd",...,并且我可以给该函数提供一种语言并具有会为我返回我要定位的语言的正确表格吗?我可以从任何地方下载的标准C ++(stl或者boost OK),MFC或者ATL,win32 api或者小型的,单一用途的免费库。谢谢。
解决方案
这是完成此工作的CodeProject上的代码。还没有自己尝试过。
我花了很多时间研究这个问题,因为这个项目太大,无法正确解决。看起来ICU库是唯一以某种较为全面的方式提供此功能的库(http://www.icu-project.org/apiref/icu4c/classRuleBasedNumberFormat.html)。不过,我不太喜欢合并这样一个庞大的库。我会继续寻找,并且仍然愿意接受建议。
我怀疑是否可能,因为在许多语言中,这种形式将取决于上下文,例如性别或者所描述名词的大小写,并且不同的语言将需要不同种类的上下文信息来确定正确的形式。
编辑:例如在波兰语中,这是" 5-ta klasa"(第5类)与" 5-ty miesi?c"(第5个月)与" w 5-tym miesi?cu"(第5个月)的对比。
我们是否在Unicode站点上查找了CLDR存储库?我不知道他们是否有这种东西,但是由于它可能是那里最全面的语言环境数据存储库,因此可能值得一看。
http://www.unicode.org/cldr/
由于我们使用的是C ++,因此我假设我们可以对所有翻译使用GNU gettext(也有Windows端口),或者至少了解它们是如何解决它的。这是复数形式的相关手册页,它解释了该问题(我们已经找到了,但已进行了更详细的介绍)及其解决方案:
http://www.gnu.org/software/automake/manual/gettext/Plural-forms.html