这段特殊的代码在 Linux 上运行良好,但在 Windows 上运行不佳:
locale.setlocale(locale.LC_ALL, '')
gettext.bindtextdomain('exposong', LOCALE_PATH)
gettext.textdomain('exposong')
代码来自 here
即使我在 locale.setlocale
中指定了语言环境(我尝试了不同的格式)它也不起作用。
一个问题可能是环境变量中没有设置语言环境(但我使用的是德语 Windows 版本;在 XP 和 Vista 上测试过)。如果我在命令行上执行 "Set Lang=de_DE"
,一切都会按预期进行。
有什么想法吗?
最佳答案
Python 中的标准 gettext 模块不使用来自 Windows 设置的标准语言设置,而是依赖于环境变量之一的存在:LANGUAGE
、LC_MESSAGES
、LC_ALL
或 LANG
。 (我想说这是将 Unix/Linux 库移植到 Windows 的 slack 示例。)
上述环境变量不会出现在典型的 Windows 机器上,因为 OS Windows 和 native 应用程序使用注册表中的设置。因此,您需要从 Windows 注册表中获取语言设置并将它们放入进程环境中。
您可以为此使用我的辅助模块:https://launchpad.net/gettext-py-windows
此助手从 Windows 设置中获取语言设置并为当前进程设置 LANG 变量,因此 gettext 可以使用此设置。
因此,如果有问题的应用程序不是您的,您可以执行以下操作。像往常一样使用 python setup.py install
安装我的 gettext 助手。然后在 locale.setlocale(locale.LC_ALL, '')
之前添加这些行:
import gettext_windows
gettext_windows.setup_env()
就这些。
关于Python:gettext 不会在 Windows 上加载翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3678174/