用C++编写国际化和本地化应用程序的基本资源是什么

What are the essential resources for writing internationalized and localized applications in C++?

本文关键字:资源 是什么 应用程序 本地化 C++ 国际化      更新时间:2023-10-16
  • 基本概念
  • 要使用哪些字符串和字符数据类型
  • 输入和输出使用哪些库/例程
  • 什么翻译机制(我想这应该是gettext,libintl)
  • 移植指南

标准的C/C++库能在多大程度上解决上述问题?我的软件在多大程度上可以跨平台移植?这方面的标准/最佳实践是什么?

我会避免使用wchar_tstd::wstring,因为在不同的环境中,这种数据类型的大小不同。例如,在Windows上是16位,而在Unix系统上是32位。这会带来麻烦。

如果您自己没有时间/资源来实现Unicode标准(最低限度),那么最好使用std::string作为UTF-8字符的容器。尽管您必须注意,在UTF-8的情况下,您将不得不处理多字节编码(1个字符可能对应1个或多个字节)。

至于库ICU需要考虑,它将允许您在编码之间转换、转换为大写/小写/标题大小写等。它还可以帮助设置区域设置。

Marius指出的翻译通常是通过一个函数完成的,该函数根据您提供的键(无论是字符串、id还是其他任何键)查找表,最后返回翻译字符串。

如果你坚持在每个平台上使用相同的数据类型,移植就会很顺利,更不用说ICU是一个跨平台的库,所以它必须成功。

wchar_tstd::wstring是您的朋友。将它们与相应的宽字符函数和对象(如wcscpy()std::wcout)一起使用。

您还可以为每个区域设置使用一个字符串表,并使用类似std::wstring getLocalizedString(MY_MESSAGE)的函数在当前区域设置的字符串表中查找常量MY_MESSAGE。如何实现字符串表取决于您,将这些内容存储在外部文件中总是一个好主意。