第十五章:国际化和本地化-gettext:消息编目-应用与模块本地化

15.1.5 应用与模块本地化
转换的作业域定义了如何安装gettext,以及如何将gettext用于一个代码体。

15.1.5.1 应用本地化
对于全应用范围的转换,可以让作者使用__builtins__命名空间全局地安装类似ungettext()的函数,这是可以接受的,因为作者可以控制应用的顶层代码,并理解完整的需求。

import gettext

gettext.install(
    'example',
    'locale',
    names=['ngettext'],
    )

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

install()函数将gettext()绑定到__builtins__命名空间中的名_()。它还增加了ngettext()和names中列出的其他函数。

15.1.5.2 模块本地化
对于一个库或单个模块,修改__builtins__并不是一个好主意,因为这可能会与某个应用全局值冲突。实际上,应当在模块前面手工地导入或重新绑定转换函数名。

import gettext

t = gettext.translation(
    'example',
    'locale',
    fallback=False,
    )
_ = t.gettext
ngettext = t.ngettext

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

15.1.6 切换转换
前面的例子在整个程序期间都使用了一个转换。有些情况下,特别是对于web应用,还需要在不同时间使用不同的消息编目,而不要退出和重新设置环境。对于这些情况,gettext中提供的基于类的API会更为方便。这些API调用实际上与这一节中介绍的全局调用相同,不过会发布消息编目对象,而且可以直接管理,因此可以使用多个编目。

猜你喜欢

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