Python: gettext не загружает переводы в Windows - PullRequest
7 голосов
/ 09 сентября 2010

Этот конкретный фрагмент кода очень хорошо работает в Linux, но не в Windows:

locale.setlocale(locale.LC_ALL, '')
gettext.bindtextdomain('exposong', LOCALE_PATH)
gettext.textdomain('exposong')

Код от здесь

Даже если я укажу локаль в locale.setlocale (я пробовал разные форматы), это не сработает. Одной из проблем может быть то, что языковой стандарт не установлен в переменных среды (но я использую немецкую версию Windows; протестирована на XP и Vista) Если я введу "Set Lang=de_DE" в командной строке, все будет работать как положено.

Есть идеи?

Ответы [ 2 ]

8 голосов
/ 10 сентября 2010

Стандартный модуль gettext в Python не использует настройки языка startdard из настроек Windows, но вместо этого полагается на наличие одной из переменных среды: LANGUAGE, LC_MESSAGES, LC_ALL или LANG , (Я бы сказал, что это пример слабого переноса библиотеки Unix / Linux на Windows.)

Переменные среды, упомянутые выше, не представлены на типичном компьютере с Windows, поскольку ОС Windows и собственные приложения вместо этого используют настройки из реестра. Поэтому вам нужно получить языковые настройки из реестра Windows и поместить их в среду процесса.

Вы можете использовать мой вспомогательный модуль для этого: https://launchpad.net/gettext-py-windows

Этот помощник получает языковые настройки из настроек Windows и устанавливает переменную LANG для текущего процесса, поэтому gettext может использовать эти настройки.

Итак, если рассматриваемое приложение не ваше, вы можете сделать следующее. Установите мой помощник gettext как обычно с python setup.py install. Затем добавьте эти строки перед locale.setlocale(locale.LC_ALL, ''):

import gettext_windows
gettext_windows.setup_env()

Вот и все.

6 голосов
/ 04 декабря 2011

Объяснение от пользователя bialix является правильным.Но вместо использования другого модуля это сработало для меня:

if sys.platform.startswith('win'):
    import locale
    if os.getenv('LANG') is None:
        lang, enc = locale.getdefaultlocale()
        os.environ['LANG'] = lang

То есть получить языковой стандарт из модуля языкового стандарта и установить переменную среды.поэтому, пожалуйста, проверьте его на других версиях перед использованием.

...