3
  • 基本概念。
  • 要使用哪些字符串和字符数据类型?
  • 哪些库/例程用于输入和输出?
  • 什么翻译机制(我猜这将是gettext,libintl)?
  • 移植指南?

标准 C/C++ 库能在多大程度上解决上述问题?我可以使我的软件跨平台的便携性如何?该领域的标准/最佳实践是什么?

4

2 回答 2

4

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

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

至于库ICU是要考虑的事情,它将允许您在编码之间进行转换,转换为大写/小写/标题大小写等。它还可以帮助处理语言环境。

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

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

于 2013-06-25T09:26:10.103 回答
0

wchar_t或者std::wstring是你的朋友。将它们与适当的宽字符函数和对象(如wcscpy()or )一起使用std::wcout

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

于 2013-06-25T09:01:54.157 回答