Internationalization 懒惰在web2py里做什么?

Internationalization 懒惰在web2py里做什么?,internationalization,web2py,Internationalization,Web2py,我正在学习web2py。我阅读了示例开源代码。在一个应用程序(storpy)中,程序员在模型文件db.py中重复使用T.lazy如: ... Field('comment', 'text'), Field('cover', 'upload', autodelete=True)) T.lazy = False db.dvds.title.requires = [IS_NOT_EMPTY(error_message=T('Missing data') + '!'), IS_NOT_IN_DB(db

我正在学习web2py。我阅读了示例开源代码。在一个应用程序(storpy)中,程序员在模型文件
db.py
中重复使用
T.lazy
如:

...
Field('comment', 'text'),
Field('cover', 'upload', autodelete=True))

T.lazy = False
db.dvds.title.requires = [IS_NOT_EMPTY(error_message=T('Missing data') + '!'), IS_NOT_IN_DB(db, 'dvds.title', error_message=T('Already in the database') + '!')]
...
T.lazy = True
为什么程序员首先将
T.lazy
设置为
False
然后设置为
True

默认情况下,
T()
是惰性的——当调用它时,它实际上并不执行转换,而是返回一个lazyT对象,直到在视图中序列化后才会转换。如果设置
T.lazy=False
,将强制立即转换,因此调用
T('some string')
将返回实际转换的字符串,而不是lazyT对象


请注意,从即将发布的版本开始,您不必将
T.lazy
切换到
False
True
,而是可以执行
T('some string',lazy=False)
来强制对单个调用进行即时转换。强制立即转换的其他方法是
str(T('some string'))
T('some string')。xml()
--
str()
序列化lazyT对象(并且
.xml()
只调用
str()
)。

感谢您的清晰解释。还有一个问题:为什么需要立即转换?例如,有时像“%Y/%m/%d”这样的日期格式会被转换,但需要在内部传递给函数,例如
date.strftime(T(“%Y/%m/%d”,lazy=False))