Winapi 在Win32上使用GNU gettext

Winapi 在Win32上使用GNU gettext,winapi,gettext,Winapi,Gettext,我正在编写一个主要面向GNU/Linux和MacOSX系统的游戏,但我在大部分代码中都保持了相当的可移植性 我已经将几乎所有特定于操作系统的东西移植到Windows;唯一剩下的就是i18n 我的问题是 如何将Win32的setlocale()函数与gettext一起使用 到目前为止,我一直在使用ISO 638/ISO 3166代码(例如,de_de.utf8),但这些代码在Windows上似乎不起作用 我尝试了setlocale(LC_ALL,“German”),成功了,但gettext无法正确

我正在编写一个主要面向GNU/Linux和MacOSX系统的游戏,但我在大部分代码中都保持了相当的可移植性

我已经将几乎所有特定于操作系统的东西移植到Windows;唯一剩下的就是i18n

我的问题是

如何将Win32的
setlocale()
函数与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)语言字符串,并以on*nix进行查找。

如果您可以阅读Python示例,那么我的一个小项目将帮助将windows区域设置ID转换为gettext语言代码,如
de_de

简而言之,您需要使用函数
GetUserDefaultLCID()
获取
LCID
,该函数返回一个整数id。然后您需要将该值映射到字符串代码。在Python中,标准模块
locale.py
中有映射:请参阅文件底部附近的
windows\u locale
字典

您可以在此处找到的Windows区域设置ID列表:


一旦有了语言代码(
de_de
),您需要直接将其传递给gettext库,或者使用环境变量语言间接传递给我。

有没有可能将端口发送给我?事实上,我也遇到了同样的问题,周围只有过时的win32存储箱:(