概要

gettext模块为Python模块和应用程序提供国际化(i18n)和本地化(l10n)支持。该模块既支持GNU gettext风格的API,也支持更高级的、基于类的API。通过gettext,在应用程序中,可以只使用一种自然语言。之后,在运行时,再将其翻译成多种不同的自然语言。


GNU gettext风格API

需要注意的是:GNU风格的API会全局地影响整个应用程序的翻译。因此,当应用程序需要在运行时切换语言的话,那么应该使用基于类的API。

例1:

  1 #coding: utf8
  2
  3 import os
  4 import gettext
  5
  6 for name in ["LANGUAGE", "LC_ALL", "LC_MESSAGES", "LANG"]:
  7     if name in os.environ and os.environ[name]:
  8         print "当前的语言环境是:", os.environ[name]
  9
 10 gettext.bindtextdomain("test_messages", "translations/")
 11 gettext.textdomain("test_messages")
 12
 13 _ = gettext.gettext
 14 print _("just a test string")
 15 gettext.textdomain("messages")
 16 print _("just a test string")  
mkdir -p translations/en_US/LC_MESSAGES/
xgettext test_gettext.py -o test_messages.pot
vim test_messages.pot

...
17 "Content-Type: text/plain; charset=UTF-8\n"
...
21 msgid "just a test string"
22 msgstr "这是一个测试字符串"
mv test_messages.pot translations/en_US/LC_MESSAGES/
msgfmt translations/en_US/LC_MESSAGES/test_messages.po -o translations/en_US/LC_MESSAGES/test_messages.mo
[vagrant@hadoop-slave-1 test]$ python test_gettext.py
当前的语言环境是: en_US.UTF-8
这是一个测试字符串
just a test string

基于类的API

下面是例1的另外一种写法:

gettext-example.jpg

参考文档