目的:用于国际化的消息目录API。
gettext模块提供了与GNU gettext 库兼容的纯 Python 实现,用于消息翻译和目录管理。 Python 源分发版提供的工具使您能够从一组源文件中提取消息,构建包含翻译的消息目录,并使用该消息目录在运行时为用户显示适当的消息。
消息目录可用于为程序提供国际化的界面,以适合用户的语言显示消息。它们还可以用于其他消息自定义,包括为不同包装程序或合作伙伴“设置”界面外观。
注意
尽管标准库文档说 Python 随附了所有必需的工具,但即使使用适当的命令行选项,pygettext.py也无法提取包装在ngettext调用中的消息。这些示例改用GNU gettext工具集中的xgettext。
翻译工作流程概述
设置和使用翻译的过程包括五个步骤。
在源代码中标识并标记包含要翻译的消息的文字字符串。
首先确定程序源中需要翻译的消息,并标记文字字符串,以便提取程序可以找到它们。
提取消息。
在源中识别出可翻译字符串后,使用xgettext提取它们并创建一个.pot文件或翻译模板。模板是一个文本文件,其中包含所有已标识字符串的副本以及其翻译的占位符。
翻译消息。
将.pot文件的副本提供给翻译器,将扩展名更改为.po。 .po文件是可编辑的源文件,用作编译步骤的输入。翻译人员应更新文件中的标题文本,并提供所有字符串的翻译。
“翻译”来自翻译的消息目录。
转换器将已完成的.po文件发送回时,请使用msgfmt将文本文件编译为二进制目录格式。运行时目录查找代码使用二进制格式。
*在运行时加载并激活适当的消息目录。
最后一步是向应用程序添加几行,以配置和加载消息目录并安装翻译功能。有两种方法可以实现此目的,同时需要进行权衡取舍。
本节的其余部分将从需要的代码修改开始,对这些步骤进行更详细的研究。
从源代码创建消息目录
gettext的工作方式是在翻译数据库中查找文字字符串,然后提取适当的翻译字符串。通常的模式是将适当的查找函数绑定到名称“ _”(单个下划线字符),以使代码不会因调用多个具有较长名称的函数而混乱。
消息提取程序xgettext查找在对目录查找功能的调用中嵌入的消息。它了解不同的源语言,并为每种语言使用适当的解析器。如果查找功能是别名或添加了其他功能,请在提取消息时给xgettext名称以考虑其他符号。
该脚本只有一条消息可供翻译。
gettext_example.py
import gettext
# 设置消息目录访问
t = gettext.translation(
'example_domain', 'locale',
fallback=True,
)
_ = t.gettext
print(_('This message is in the script.'))
文本"This message is in the script."是要从目录中替换的消息。启用了回退模式,因此,如果在没有消息目录的情况下运行脚本,则会打印内联消息。
$ python3 gettext_example.py
This message is in the script.
下一步是使用pygettext.py或xgettext提取消息并创建.pot文件。
$ xgettext -o example.pot gettext_example.py
产生的输出文件包含以下内容。
example.pot
#一些描述性标题。
#版权所有(C)套餐的版权持有人
#此文件与PACKAGE软件包使用相同的许可证分发。
#第一作者,年份。
#
#,模糊
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION."
"Report-Msgid-Bugs-To: ."
"POT-Creation-Date: 2018-03-18 16:20-0400."
"PO-Revision-Date: YEAR-