2

我将我的 C++ iOS 游戏引擎移植到了 Android 上,它在返回到 Android 2.2 的设备上运行良好,但在支持本地化时遇到了问题。

C++ 引擎加载使用 poedit 创建的 .po (gettext) 本地化文件,并将它们放入std::wstring. 这在我支持的其他平台上工作得非常好,但在 Android 上不起作用,因为 NDK 不正确支持 wchar/wstring。有关我当前(非常基本)的实现,请参见github 。

现在,我想我可以手动将多字节字符串转换为自定义的std::basic_string<uint_32>. 如建议 - Android NDK C++ 'wstring' 支持

这在大多数情况下都很好,但是人们如何处理字符串格式?虽然我的大部分字符串只是文本,不需要任何格式,但有些字符串类似于“干得好 %1$s,你得分 %2$d! ”。

人们如何在没有swprintf支持的情况下处理这些字符串的格式?

是否有推荐的方法来可靠地处理跨平台本地化而不依赖 wchar/wstring 支持(我认为无论如何都不推荐 - 但似乎没有人建议不依赖不适合的 20MB+ 库的可行替代方案移动的)?

非常感谢。

4

1 回答 1

1

我已经设法让它发挥作用。我没有在整个应用程序中使用宽字符串,而是将其转换为在整个应用程序中使用 UTF8。这让我可以sprintf正常使用(当然有某些例外,比如限制字符串长度不起作用)。然后我在字体渲染器中将字符串转换为 UTF32,这样我就不必即时解码 UTF8。

本地化字体渲染器的实现刚刚上传到github

参考

视频游戏中的 Unicode 使用
UTF8 无处不在

于 2012-08-14T19:43:57.553 回答