- 基本概念。
- 要使用哪些字符串和字符数据类型?
- 哪些库/例程用于输入和输出?
- 什么翻译机制(我猜这将是gettext,libintl)?
- 移植指南?
标准 C/C++ 库能在多大程度上解决上述问题?我可以使我的软件跨平台的便携性如何?该领域的标准/最佳实践是什么?
标准 C/C++ 库能在多大程度上解决上述问题?我可以使我的软件跨平台的便携性如何?该领域的标准/最佳实践是什么?
我会避免使用wchar_t
orstd::wstring
因为这种数据类型在不同环境中的大小不同。例如在 Windows 上是 16 位,而在 Unix 系统上是 32 位。这是自找麻烦。
如果您没有时间/资源自己实现 Unicode 标准(最低限度),最好将std::string
其用作 UTF-8 字符的容器。尽管您必须知道,在 UTF-8 的情况下,您将不得不处理多字节编码(1 个字符可能对应于 1 个或更多字节)。
至于库ICU是要考虑的事情,它将允许您在编码之间进行转换,转换为大写/小写/标题大小写等。它还可以帮助处理语言环境。
正如Marius所指出的,翻译通常是通过一个函数完成的,该函数通过您提供的键(无论是字符串、id 还是其他任何内容)查找表,最后返回翻译字符串。
如果你坚持在每个平台上使用相同的数据类型,移植就会顺利进行,更不用说ICU是一个跨平台的库,所以它必须成功。
wchar_t
或者std::wstring
是你的朋友。将它们与适当的宽字符函数和对象(如wcscpy()
or )一起使用std::wcout
。
您还可以为每个语言环境使用一个字符串表,并且类似的函数会在当前语言环境的字符串表std::wstring getLocalizedString(MY_MESSAGE)
中查找常量MY_MESSAGE
。如何实现字符串表取决于您,将这些内容存储在外部文件中始终是一个好主意。