我正在编写一款主要面向 GNU/Linux 和 Mac OS X 系统的游戏,但我在大部分代码中都保持了相当的可移植性。
我已将几乎所有特定于操作系统的内容移植到 Windows;唯一剩下的就是 i18n。
我的问题是这样的
How am I supposed to use Win32's
setlocale()
function along with gettext?
到目前为止,我一直在使用 ISO 638/ISO 3166 代码(例如 de_DE.utf8
),但这些代码似乎不适用于 Windows。
我尝试过 setlocale(LC_ALL, "German"),它成功了,但是 gettext 无法正确找到翻译后的字符串,即使在使用 bindtextdomain 之后也是如此。
有什么提示吗?我想坚持使用 GNU gettext 以避免重写大量代码。
最佳答案
好吧,经过一番挖掘,我找到了答案:Windows 上的 setlocale() 对 gettext 没有任何作用。 gettext 使用用户的环境和线程的区域设置(请参阅 GetThreadLocale、SetThreadLocale)。如果使用线程的区域设置,则返回的 LCID 将转换为 ISO 639 和 3166(例如 en_US)的语言字符串,并且查找将按照 *nix 进行。
关于winapi - 在 Win32 上使用 GNU gettext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/628557/