第十五章:国际化和本地化-gettext:消息编目-有源代码创建消息编目

15.1.2 有源代码创建消息编目
gettext首先在一个转换数据库中查找字面量串,并取出适当的转换串。常用模式是将适当的查找函数与名“_”(单个下划线字符)绑定,使得代码中不会堆积大量长名函数调用。
消息抽取程序xgettext会查找嵌入在编目查找函数(catalog lookup function)调用中的消息。它知道不同的源语言,并分别使用适当的解析器。如果查找函数有别名,或者增加了额外的函数,那么便要为xgettext提供这些额外符号的名,从而能够在抽取消息时考虑到。
以下脚本提供了一个消息,可以完成转换。

import gettext

# Set up message catalog access.
t = gettext.translation(
    'example_domain','locale',
    fallback=True,
    )
_ = t.gettext

print(_('This message is in the script.'))

文本“This message is in the script.”是将要由编码替换的消息。这里启用了Fallback模式,所以如果运行脚本时没有一个消息编目,则会打印内联的消息。
在这里插入图片描述
下一步是抽取消息,并创建.pot文件,,这里可以使用pygettext.py或xgettext。

生成的输出文件包含以下内容。
在这里插入图片描述

消息编目被安装到按域(domain)和语言(language)组织的目录中。域由应用或库提供,通常是一个唯一值,如应用名。在这里,gettext_example.py中的域是example_domian。语言值则由用户环境在运行时通过某个环境变量(LANGYAGE,LC_ALL,LC_MESSAGE或LANG)提供,这取决于其配置和平台。这一章中的例子在运行时都将语言设置为en_US。
既然模板已经准备好,那么下一步便是创建必要的目录结构,并把模板复制到适当的位置。
在这里插入图片描述
使用msgformat从.po文件构建这个编目。
在这里插入图片描述
在这里插入图片描述

gettext_example.py中的域是example_domain,但是文件名为example.pot。要让gettext找到正确的转换文件,名字必须匹配。

t = gettext.translation(
    'example','locale',
    fallback=True,
    )

现在运行脚本时,会打印编目中的消息而不是内联字符串。

猜你喜欢

转载自blog.csdn.net/weixin_43193719/article/details/94754987