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"
,一切就都正常了。
有什么想法吗?
2 个回答
用户bialix的解释是对的。不过我用的不是其他模块,而是这样做的:
if sys.platform.startswith('win'):
import locale
if os.getenv('LANG') is None:
lang, enc = locale.getdefaultlocale()
os.environ['LANG'] = lang
也就是说,从地区模块获取地区设置,然后设置环境变量。
这个方法只在Windows 7上测试过,所以在其他版本上使用之前请先检查一下。
Python里的标准gettext模块不使用Windows的标准语言设置,而是依赖于一些环境变量,比如LANGUAGE
、LC_MESSAGES
、LC_ALL
或LANG
。我觉得这就像是把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()
就这样。