Python:gettext 在 Windows 上不加载翻译

发布于 2024-09-18 06:50:05 字数 502 浏览 13 评论 0 原文

这段特定的代码在 Linux 上运行得很好,但在 Windows 上则不然:

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

来自 此处

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

有什么想法吗?

This particular piece of code works very well on Linux, but not on Windows:

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

Code from here

Even if i specify the locale in locale.setlocale (I tried different formats) it doesn't work.
One problem might be that the locale is not set in the environment variables (but I use a German Windows version; tested on XP and Vista). If I do "Set Lang=de_DE" on the command line, everything works as expected.

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

寄离 2024-09-25 06:50:12

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

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

也就是说,从区域设置模块获取区域设置并设置环境变量。

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

The explanation from user bialix is correct. But instead of using another module this worked for me:

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

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.

你在我安 2024-09-25 06:50:10

Python 中的标准 gettext 模块不使用 Windows 设置中的 startdard 语言设置,而是依赖于以下环境变量之一:LANGUAGELC_MESSAGESLC_ALLLANG。 (我想说这是将 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, '') 之前添加这些行:

import gettext_windows
gettext_windows.setup_env()

就这样。

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 or LANG. (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 before locale.setlocale(locale.LC_ALL, ''):

import gettext_windows
gettext_windows.setup_env()

That's all.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文