C语言中I18N的资源

时间:2008-10-12 13:40:49

标签: c++ internationalization

我正在玩c ++中的语言环境和I18N,并一直在寻找真实世界的例子。我在book(2012年4月发布的C ++ 11第2版)中阅读了关于I18N的Josuttis章节,并发现它很有用但没有真实世界的例子可以借鉴我不知道如果我遵循最佳实践就会犯下初学者的错误。 StackOverflow可以用什么资源指向我在网络和印刷中用C ++做I18N的东西?

哪些库可用于C ++,使i18n更容易?标准库中不需要的是什么?乍一看,似乎标准库中不存在UTF8支持。

编辑:

在做了一些阅读之后,似乎C和C ++都是Unicode“不可知”。对于处理以Unicode / UTF8 / 16/32编码的数据,似乎还需要使用第三方库。问题的关键在于标准库本身只考虑ISO 8859和相关的字符页面,这些页面根据您的语言环境设置而变化。这意味着我可能希望将ICU库用于字符串,而不是使用std::string甚至是std::wstring

6 个答案:

答案 0 :(得分:11)

您已经指向GNU gettext,它允许您在运行时用本地化版本替换文字字符串 - 本地化的一个方面(这是在您完成国际化后,当有人实际使用时会发生的情况)您在特定区域设置中的国际化代码)。您还被指向了Boost(特别是Boost.Locale)个库;对于与C ++相关的任何事情,这通常都是一个很好的答案。

您可能会看到的另一个地方是ICU(Unicode的国际组件)项目。作为数据源,您可以将CLDR(公共区域设置数据存储库)视为有关不同区域设置的信息来源; Unicode网站也有很多关于不同文化的其他方面的信息,因为它涉及多种语言。

作为现在的最终资源,一个相当专业的资源,有Olson Time Zone database,每年更新多次,以跟踪不同国家改变他们在冬季和冬季之间何时改变的规则的方式夏天(夏令时和标准时间)。

答案 1 :(得分:1)

看看wxWidgets国际化的例子。它具有gettext中使用的转换机制的非gnu实现(前面提到过)。您甚至可以在商业应用程序中使用它,因为wxWidgets许可证允许您这样做。

如果您只是在寻找一种国际化应用程序的方法,那么gettext就是起点。

答案 2 :(得分:0)

查看GNU gettext

知道你使用哪个C ++库会很有趣,因为一些GUI库已经提供了i18n支持。

答案 3 :(得分:0)

我是第二个GNU gettext。但是,如果您正在使用Qt(如果您想使用C ++进行GUI,那么很有可能),Qt附带了自己的gettext版本和一个精简的翻译工具(Qt Linguist),它使事情变得更容易,也可以使用来自非GUI应用程序而没有开销。我们甚至在服务中都有它。

然而,关于C ++缺乏什么,我想到了什么:

  • 完全支持有关数字,日期或货币的区域设置。并且请记住,语言环境的区别不仅仅是小数点分隔符,包括排序,这让我想到了第二点:
  • C ++本身没有支持有序参数的格式函数(因为在另一种语言中,单词顺序可能与您的语言不同)。你可以使用boost :: format。 Qt当然也支持它。

还要看看你必须为自己做些什么,即使这些事情得到支持。例如,.NET附带了一个可供使用的完整语言环境列表。

答案 4 :(得分:0)

对于UTF-8支持,请查看UTF-8 CPP库。

答案 5 :(得分:-3)

您不需要库来完成此任务。请参阅卫星DLL here的MS指南。

如果您指定在项目设置中使用Unicode并使用Unicode字符串函数(而不是char),则标准使用Satellite DLL来保存特定于语言环境的数据(对话框,字符串等)就足够了。

只要DLL被正确命名,Windows本身就会负责查找正确的资源。卫星DLL所需的后缀是here