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