我正在玩 c++ 中的语言环境和 I18N 的东西,并且一直在寻找真实世界的例子。我在他的 书中 通读了 Josuttis 关于 I18N 的章节(C++11 的第 2 版将于 2012 年 4 月发布),发现它很有用,但没有可供借鉴的真实世界示例我不知道我是否遵循最佳实践正在犯初学者错误。 StackOverflow 可以为我在网络上和印刷品上提供哪些资源来用 C++ 做 I18N 的东西?
还有哪些可用于 C++ 的库使 i18n 更容易?标准库中没有什么需要?乍一看,标准库中似乎不存在 UTF8 支持。
编辑:
在做了更多阅读之后,似乎 C 和 C++ 都是 Unicode“不可知论者”。似乎还需要使用第三方库来处理以 Unicode/UTF8/16/32 编码的数据。关键在于标准库本身只考虑 ISO 8859 和相关字符页面,这些页面会根据您的语言环境设置而变化。这意味着我可能想将 ICU 库用于字符串,而不是使用 std::string
甚至 std::wstring
。
原文由 Mark Kegel 发布,翻译遵循 CC BY-SA 4.0 许可协议
您已经被指向 GNU gettext ,它允许您在运行时用本地化版本替换文字字符串 - 本地化的一个方面(这是在您完成国际化之后发生的事情,当有人实际使用您的国际化代码时语言环境)。您还被指向了 Boost (特别是 Boost.Locale )库;对于与 C++ 相关的任何事情,这通常是一个很好的答案。
您可能会看到的另一个地方是 ICU (Unicode 的国际组件)项目。作为数据源,您可以将 CLDR (通用区域设置数据存储库)视为有关不同区域设置的信息源; Unicode 网站也有很多关于不同文化其他方面的信息,因为它涉及多种语言。
作为目前的最后一个资源,一个相当专业的资源,有 奥尔森时区数据库,该数据库每年更新多次,以跟踪不同国家/地区更改其关于何时在冬季和夏季之间更改规则的方式(夏令时和标准)时间。