懶惰與非懶惰翻譯

使用非延遲翻譯時,會立即翻譯字串。

>>> 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") 時,可能無法啟用翻譯(語言未選中)
  • 某些字串只能在啟動時進行評估(例如,在類屬性中,例如模型和表單欄位定義)