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

时间:2013-06-25 08:53:05

标签: c++ internationalization gettext

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

标准C / C ++库能在多长时间内解决上述问题?我可以通过平台轻松制作软件吗?该领域的标准/最佳实践是什么?

2 个答案:

答案 0 :(得分:4)

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

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

至于库 ICU 是需要考虑的事项,它将允许您在编码之间进行转换,转换为上/下/标题情况等。它还可以帮助区域设置。

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

如果你坚持使用每个平台上相同的数据类型,移植将会顺利进行,更不用说 ICU 是一个跨平台的库,所以必须解决这个问题。

答案 1 :(得分:0)

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

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