使用NDK在Android上进行本地化/本地化

时间:2012-08-14 08:51:31

标签: android c++ localization android-ndk

我将我的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' support

中所述

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

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

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

非常感谢。

1 个答案:

答案 0 :(得分:1)

我设法让这个工作。我没有在整个应用程序中使用宽字符串,而是将其转换为使用UTF8。这允许我像往常一样使用sprintf(当然有一些例外,比如限制不起作用的字符串长度)。然后我在字体渲染器中将字符串转换为UTF32,因此我不必动态解码UTF8。

该实施工作刚刚上传到githublocalisationfont renderer

参考

Unicode usage in video games
UTF8 everywhere