Python:gettext在Windows上无法加载翻译

8 投票
2 回答
3543 浏览
提问于 2025-04-16 03:55

这段代码在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 个回答

7

用户bialix的解释是对的。不过我用的不是其他模块,而是这样做的:

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

也就是说,从地区模块获取地区设置,然后设置环境变量。

这个方法只在Windows 7上测试过,所以在其他版本上使用之前请先检查一下。

10

Python里的标准gettext模块不使用Windows的标准语言设置,而是依赖于一些环境变量,比如LANGUAGELC_MESSAGESLC_ALLLANG。我觉得这就像是把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()

就这样。

撰写回答