这是我正在尝试做的事情:我想以与 gettext 兼容的方式启用 i18n 对我的 zmi python 脚本的支持,并使用 '_' 函数。
这是我到目前为止所做的。在我的 Zope 产品模块中,我运行:
import gettext, __builtin__
t = gettext.translation('myDomain', LOCALESPATH, languages=['de'], fallback=True)
__builtin__._ = t.gettext
在(不受限制的)外部方法中调用 _ 工作正常,它按预期返回翻译。
def testI18n():
return _('text to be translated')
如果我在使用 RestrictedPython 执行其代码的 Zope“脚本(Python)”中尝试此操作,我会收到 NameError:“未定义全局名称 '_'”。
这是我的解决方法:
from myModule import myTranslator as _
print _('text to be translated')
return printed
效果很好(当然,必须允许 Python 脚本使用 myModule)。
但我很好奇是否有办法将 _ 作为受限 python 脚本中的内置函数,以及是否可以在 RestrictedPython.Guards 中扩展 safe_builtins。