我将我的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 +库的可行替代方案不适合移动)?
非常感谢。
答案 0 :(得分:1)
我设法让这个工作。我没有在整个应用程序中使用宽字符串,而是将其转换为使用UTF8。这允许我像往常一样使用sprintf
(当然有一些例外,比如限制不起作用的字符串长度)。然后我在字体渲染器中将字符串转换为UTF32,因此我不必动态解码UTF8。
该实施工作刚刚上传到github和localisation的font renderer
参考