我需要国际化和翻译 python 应用程序。我期待一些字典集合驻留在其他资源文件中,这些资源文件可以在运行时切换并在 python 代码中顺利使用。
我在 stackoverflow.com 上搜索过类似的工具,但只找到特定于平台的库,例如 pylons、django 等。
有没有通用的现成库?
我需要国际化和翻译 python 应用程序。我期待一些字典集合驻留在其他资源文件中,这些资源文件可以在运行时切换并在 python 代码中顺利使用。
我在 stackoverflow.com 上搜索过类似的工具,但只找到特定于平台的库,例如 pylons、django 等。
有没有通用的现成库?
Python 的标准gettext
模块提供了这一点。在此处查看 Python 文档。
gettext 模块为您的 Python 模块和应用程序提供国际化 (I18N) 和本地化 (L10N) 服务。它支持 GNU gettext 消息目录 API 和可能更适合 Python 文件的更高级别、基于类的 API。下面描述的界面允许您用一种自然语言编写模块和应用程序消息,并提供翻译消息目录以在不同的自然语言下运行。
一个简单的例子:
import gettext
gettext.bindtextdomain('myapplication', '/path/to/my/language/directory')
gettext.textdomain('myapplication')
_ = gettext.gettext
# ...
print _('This is a translatable string.')
Babel提供了这样的工具:
一组用于国际化 Python 应用程序的工具
Babel由两个主要部分组成:
- 用于构建和使用 gettext 消息目录的工具
- CLDR(通用区域设置数据存储库)的 Python 接口,提供对各种区域设置显示名称、本地化数字和日期格式等的访问。
因此,它可以帮助您翻译字符串并根据当前语言环境提供本地化的浮点数、货币、日期和其他信息:
>>> locale = Locale('es')
>>> month_names = locale.months['format']['wide'].items()
>>> month_names.sort()
>>> for idx, name in month_names:
... print name
enero
febrero
marzo
abril
mayo
junio
julio
agosto
septiembre
octubre
noviembre
diciembre
>>> format_decimal(1.2345, locale='en_US')
u'1.234'
>>> format_decimal(1.2345, locale='sv_SE')
u'1,234'
>>> format_decimal(12345, locale='de_DE')
u'12.345'
它建立在默认库之上gettext
进行翻译,为您提供从各种源文件(python、模板等)中提取消息的工具,包括为其他包提供额外提取器的插件系统。