winapi - 在 Win32 上使用 GNU gettext

标签 winapi gettext

我正在编写一款主要面向 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/

相关文章:

angularjs - angularjs 中的 gettext 模块不会翻译 Controller 中的 gettextCatalog.getString()

php - gettext 带数字的字符串

java - Android:应用程序在对话框中获取 editText 文本时崩溃

c++ - ShellExecuteEx + Runas +文件访问权限

c - 如何将资源从一个可执行文件复制到另一个可执行文件

windows - 如果 ImpersonateSelf() 失败后的 RevertToSelf() 会致命吗?

php - 如何说服其他程序员使用 Gettext?

c++ - 如何将 key 发送到当前从后台程序运行的任何应用程序 (c++)

java - 使用 JNA 查询所有 Windows 服务

python - 自动生成 Piratespeak .po/gettext/translations 用于 i18n 测试?