用C++编写国际化和本地化应用程序的基本资源是什么
What are the essential resources for writing internationalized and localized applications in C++?
- 基本概念
- 要使用哪些字符串和字符数据类型
- 输入和输出使用哪些库/例程
- 什么翻译机制(我想这应该是gettext,libintl)
- 移植指南
标准的C/C++库能在多大程度上解决上述问题?我的软件在多大程度上可以跨平台移植?这方面的标准/最佳实践是什么?
我会避免使用wchar_t
或std::wstring
,因为在不同的环境中,这种数据类型的大小不同。例如,在Windows上是16位,而在Unix系统上是32位。这会带来麻烦。
如果您自己没有时间/资源来实现Unicode标准(最低限度),那么最好使用std::string
作为UTF-8字符的容器。尽管您必须注意,在UTF-8的情况下,您将不得不处理多字节编码(1个字符可能对应1个或多个字节)。
至于库ICU需要考虑,它将允许您在编码之间转换、转换为大写/小写/标题大小写等。它还可以帮助设置区域设置。
Marius指出的翻译通常是通过一个函数完成的,该函数根据您提供的键(无论是字符串、id还是其他任何键)查找表,最后返回翻译字符串。
如果你坚持在每个平台上使用相同的数据类型,移植就会很顺利,更不用说ICU是一个跨平台的库,所以它必须成功。
wchar_t
或std::wstring
是您的朋友。将它们与相应的宽字符函数和对象(如wcscpy()
或std::wcout
)一起使用。
您还可以为每个区域设置使用一个字符串表,并使用类似std::wstring getLocalizedString(MY_MESSAGE)
的函数在当前区域设置的字符串表中查找常量MY_MESSAGE
。如何实现字符串表取决于您,将这些内容存储在外部文件中总是一个好主意。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- C++中名称篡改的目的是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 派生类销毁的最佳实践是什么
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 通过JNI传递数据数组的最快方法是什么
- 对话框 MFC 资源度量的单位是什么
- 在QT资源系统中,前缀比文件系统路径的优势是什么?
- 使用 C++/WinAPI 在对话窗口中释放资源的相应消息是什么?
- 在MFC项目中使用资源文件的正确方法是什么
- 停止QThread工作进程处理即将删除的资源的正确方法是什么
- 用C++编写国际化和本地化应用程序的基本资源是什么
- 公开类拥有的资源的正确方式是什么