我建议不要安装_
到内置程序中,而是在你的包中定义它__init__
并在其他模块中显式导入它。
例如mypackage/__init__.py
:
import gettext
translations = gettext.translation('mypackage')
_ = translations.ugettext
然后在其他地方
from mypackage import _
some_string = _("Something that will be translated")
我已经有很长时间没有真正使用 gettext 了,所以以这个例子为例(尽管它是基于gettext 文档中的建议)。
我一直在使用基于 Zope 的 Web 应用程序,这些应用程序在模块导入期间无法进行翻译——我们需要将实际翻译延迟到请求呈现时间,因此我们知道用户的首选语言。我们使用 zope.i18nmessageid 的 MessageFactory 以非常相似的方式标记要翻译的字符串:
# mypackage/__init__.py
from zope.i18nmessageid import MessageFactory
_ = MessageFactory("mypackage")
# mypackage/somemodule.py
from mypackage import _
some_string = _("Something that will be translated later")
# e.g. with print zope.i18n.translate(some_string, request)