Python:gettext 在 Windows 上不加载翻译
这段特定的代码在 Linux 上运行得很好,但在 Windows 上则不然:
locale.setlocale(locale.LC_ALL, '')
gettext.bindtextdomain('exposong', LOCALE_PATH)
gettext.textdomain('exposong')
来自 此处
即使我在 locale.setlocale
中指定区域设置(我尝试了不同的格式),它也不起作用。
一个问题可能是环境变量中未设置区域设置(但我使用德语 Windows 版本;在 XP 和 Vista 上进行了测试)。如果我在命令行上执行“Set Lang=de_DE”,一切都会按预期进行。
有什么想法吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
用户bialix的解释是正确的。但是,这对我来说不是使用另一个模块:
也就是说,从区域设置模块获取区域设置并设置环境变量。
仅在Windows 7上进行了测试,使用前请在其他版本上进行检查。
The explanation from user bialix is correct. But instead of using another module this worked for me:
That is, get the locale from the locale module and set the environment variable.
It was tested only on Windows 7, so please check it on other versions before use.
Python 中的标准 gettext 模块不使用 Windows 设置中的 startdard 语言设置,而是依赖于以下环境变量之一:
LANGUAGE
、LC_MESSAGES
、LC_ALL
或LANG
。 (我想说这是将 Unix/Linux 库移植到 Windows 的 slack 示例。)上面提到的环境变量不会出现在典型的 Windows 计算机上,因为 Windows 操作系统和本机应用程序使用注册表中的设置反而。因此,您需要从 Windows 注册表中获取语言设置并将其放入进程环境中。
您可以使用我的帮助程序模块:https://launchpad.net/gettext-py-windows
该助手从 Windows 设置中获取语言设置,并为当前进程设置 LANG 变量,因此 gettext 可以使用此设置。
因此,如果相关应用程序不是您的,您可以执行以下操作。像往常一样使用 python setup.py install 安装我的 gettext 助手。然后在
locale.setlocale(locale.LC_ALL, '')
之前添加这些行:就这样。
Standard gettext module in Python does not use startdard language settings from Windows settings, but instead relies on presence one of the environment variables:
LANGUAGE
,LC_MESSAGES
,LC_ALL
orLANG
. (I'd say this is example of slack porting of Unix/Linux library to Windows.)The environment variables mentioned above do not present on typical Windows machine, because OS Windows and native applications use settings from registry instead. So you need to get the language settings from Windows registry and put them into process environment.
You can use my helper module for this: https://launchpad.net/gettext-py-windows
This helper obtains language settings from Windows settings and set LANG variable for current process, so gettext can use this settings.
So, if the application in question is not yours you can do the following. Install my gettext helper as usual with
python setup.py install
. Then add these lines beforelocale.setlocale(locale.LC_ALL, '')
:That's all.