9

有没有一种简单的方法可以将数字 1、2、3……转换为“1st”、“2nd”、“3rd”……,并且我可以给函数一种语言并拥有它返回我所针对的语言的正确形式?标准 C++(stl 或 boost OK)、MFC 或 ATL、win32 api 或小型、单一用途且免费的库,我可以从某个地方下载。谢谢。

4

5 回答 5

5

我怀疑这是否可能,因为在许多语言中,这种形式将取决于上下文,例如它所描述的名词的性别或大小写,并且不同的语言将需要不同类型的上下文信息来确定正确的形式。

编辑:例如在波兰语中,它是“5-ta klasa”(第 5 级)与“5-ty miesiąc”(第 5 个月)与“w 5-tym miesiącu”(第 5 个月)。

于 2008-09-30T07:12:30.187 回答
0

I've spend quite some time researching this, because it's too large a project to get right myself. It looks like the ICU library is the only one that provides this functionality in a somewhat comprehensive way (http://www.icu-project.org/apiref/icu4c/classRuleBasedNumberFormat.html). I'm not too keen on incorporating a huge library like that, though. I'll keep on looking and I'm still open to suggestions.

于 2008-09-26T07:37:07.630 回答
0

您是否在 Unicode 站点上查找过 CLDR 存储库?我不知道他们是否有这种东西,但由于它可能是最全面的语言环境数据存储库,它可能值得一看。 http://www.unicode.org/cldr/

于 2008-10-02T06:58:20.453 回答
0

由于您使用 C++,我假设您可以使用 GNU gettext(还有一个 Windows 端口)进行所有翻译,或者至少了解他们是如何解决它的。这是复数形式的相关手册页,解释了问题(您已经找到,但更详细)及其解决方案:

http://www.gnu.org/software/automake/manual/gettext/Plural-forms.html

于 2008-10-07T19:19:10.233 回答
-2

是 CodeProject 上完成这项工作的一段代码。我自己没试过。

于 2008-09-26T04:41:39.470 回答