【问题标题】:What are the essential resources for writing internationalized and localized applications in C++?用 C++ 编写国际化和本地化应用程序的基本资源是什么?
【发布时间】:2013-06-25 08:53:04
【问题描述】:
  • 基本概念。
  • 要使用哪些字符串和字符数据类型?
  • 用于输入和输出的库/例程?
  • 什么翻译机制(我猜这应该是 gettext、libintl)?
  • 移植指南?

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

【问题讨论】:

  • 你可能想看看UTF-8 everywhere
  • 这个问题太宽泛了,无法回答,事实上,您提出的 8 个问题中的每一个问题都可能作为单独的 StackOverflow 问题太宽泛了!你能试着让你的问题更具体吗?

标签: c++ internationalization gettext


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-28
      • 2011-12-08
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      相关资源
      最近更新 更多