Python:gettext不会在Windows上加载翻译

Sam*_*odt 7 python windows translation gettext

这段特殊的代码在Linux上运行良好,但在Windows上运行不正常:

locale.setlocale(locale.LC_ALL, '')
gettext.bindtextdomain('exposong', LOCALE_PATH)
gettext.textdomain('exposong')
Run Code Online (Sandbox Code Playgroud)

代码来自这里

即使我指定了区域设置locale.setlocale(我尝试了不同的格式),它也不起作用.一个问题可能是环境变量中未设置区域设置(但我使用的是德语Windows版本;在XP和Vista上测试过).如果我"Set Lang=de_DE"在命令行上执行,一切都按预期工作.

有任何想法吗?

bia*_*lix 8

在Python的gettext标准模块不使用从Windows设置startdard语言设置,而是依赖于存在的环境变量之一:LANGUAGE,LC_MESSAGES,LC_ALLLANG.(我想说这是将Unix/Linux库轻松移植到Windows的示例.)

上面提到的环境变量在典型的Windows机器上不存在,因为OS 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()
Run Code Online (Sandbox Code Playgroud)

就这样.


Hav*_*vok 6

用户bialix的解释是正确的.但不是使用另一个模块,这对我有用:

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

也就是说,从语言环境模块获取语言环境并设置环境变量.

它仅在Windows 7上进行了测试,因此请在使用前在其他版本上进行检查.