Использование GNU gettext на Win32 - PullRequest
1 голос
/ 10 марта 2009

Я пишу игру, которая в основном предназначена для систем GNU / Linux и Mac OS X, но я держал вещи довольно переносимыми в большей части моего кода.

Я перенес почти все специфичные для ОС вещи в Windows; единственное, что осталось, это i18n.

Мой вопрос такой

Как мне использовать setlocale() функцию Win32 вместе с gettext?

До сих пор я использовал коды ISO 638 / ISO 3166 (например, de_DE.utf8), но, похоже, они не работают в Windows.

Я пробовал setlocale (LC_ALL, "German"), который успешно выполняется, но gettext не может правильно найти переведенные строки, даже после использования bindtextdomain.

Есть намеки? Я хотел бы придерживаться GNU gettext, чтобы избежать переписывания кучи кода.

Ответы [ 2 ]

2 голосов
/ 12 марта 2009

Ну, после некоторого копания я нашел ответ: setlocale () в Windows ничего не делает для gettext. gettext использует среду пользователя и локаль потока (см. GetThreadLocale, SetThreadLocale). Если используется языковой стандарт потока, возвращенный LCID преобразуется в языковую строку с ISO 639 и 3166 (например, en_US), и поиск продолжается как в * nix.

0 голосов
/ 03 февраля 2010

Если вы можете прочитать пример Python, то есть мой крошечный проект, который помогает конвертировать идентификаторы языковых стандартов Windows в коды языка текста, такие как de_DE: https://launchpad.net/gettext-py-windows

Короче говоря, вам нужно получить LCID с функцией GetUserDefaultLCID(), которая возвращает вам целочисленный идентификатор. Затем вам нужно отобразить это значение на строковый код. В Python есть карта в стандартном модуле locale.py: см. windows_locale словарь внизу файла http://svn.python.org/view/python/trunk/Lib/locale.py?view=markup

Список идентификаторов локалей Windows вы можете найти здесь: http://msdn.microsoft.com/en-us/library/dd318693%28VS.85%29.aspx

Как только вы получите код языка (de_DE), вам нужно будет передать его либо напрямую в библиотеку gettext, либо косвенно, используя переменную окружения LANGUAGE.

...