懒惰与非懒惰翻译
使用非延迟翻译时,会立即翻译字符串。
>>> from django.utils.translation import activate, ugettext as _
>>> month = _("June")
>>> month
'June'
>>> activate('fr')
>>> _("June")
'juin'
>>> activate('de')
>>> _("June")
'Juni'
>>> month
'June'
使用懒惰时,仅在实际使用时进行翻译。
>>> from django.utils.translation import activate, ugettext_lazy as _
>>> month = _("June")
>>> month
<django.utils.functional.lazy.<locals>.__proxy__ object at 0x7f61cb805780>
>>> str(month)
'June'
>>> activate('fr')
>>> month
<django.utils.functional.lazy.<locals>.__proxy__ object at 0x7f61cb805780>
>>> "month: {}".format(month)
'month: juin'
>>> "month: %s" % month
'month: Juni'
在以下情况下,你必须使用延迟翻译:
- 评估
_("some string")
时,可能无法激活翻译(语言未选中) - 某些字符串只能在启动时进行评估(例如,在类属性中,例如模型和表单字段定义)