2

我正在编写一个主要面向 GNU/Linux 和 Mac OS X 系统的游戏,但我一直在我的大部分代码中保持相当可移植的内容。

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

我的问题是这个

我应该如何将 Win32 的setlocale()功能与 gettext 一起使用?

到目前为止,我一直在使用 ISO 638/ISO 3166 代码(例如de_DE.utf8),但这些代码似乎不适用于 Windows。

我尝试了 setlocale(LC_ALL, "German"),它成功了,但是 gettext 无法正确找到翻译后的字符串,即使在使用 bindtextdomain 之后也是如此。

有什么提示吗?我想坚持使用 GNU gettext 以避免重写大量代码。

4

2 回答 2

3

好吧,经过一番挖掘,我找到了答案:Windows 上的 setlocale() 对 gettext 没有任何作用。gettext 使用用户的环境和线程的区域设置(请参阅 GetThreadLocale、SetThreadLocale)。如果使用线程的区域设置,则返回的 LCID 将转换为具有 ISO 639 和 3166 的语言字符串(例如 en_US),并且查找在 *nix 上进行。

于 2009-03-12T04:53:52.913 回答
0

如果您可以阅读 Python 示例,那么我的小项目有助于将 Windows 区域设置 ID 转换为 gettext 语言代码,例如de_DEhttps ://launchpad.net/gettext-py-windows

简而言之,您需要使用返回整数 id 的LCID函数来获取。GetUserDefaultLCID()然后您需要将此值映射到字符串代码。在 Python 中,标准模块中有地图locale.py:请参阅windows_locale文件底部附近的字典http://svn.python.org/view/python/trunk/Lib/locale.py?view=markup

您可以在此处找到 Windows 区域设置 ID 列表:http: //msdn.microsoft.com/en-us/library/dd318693%28VS.85%29.aspx

获得语言代码 ( de_DE) 后,您需要将其直接传递给 gettext 库或使用环境变量 LANGUAGE 间接传递。

于 2010-02-03T09:33:27.870 回答