Posted November 05, 2018
#redirect
Django API 提供了几个有用的模块来帮助你翻译你的应用程序. 它们都在django.utils.translation
中使用,大多数情况下, 我们会使用到ugettext()和ugettext_lazy().
「u」前缀代表「unicode」, 因为大多数情况下,我们经常使用 Unicode, 所以使用ugettext()代替gettext(), 使用ugettext_lazy()代替gettext_lazy().
顾名思义, lazy该函数是对翻译字符串的引用, 而不是实际翻译的文本. 因此在访问值的时候会进行转换, 而不是调用的时候.
注意这个特性,Django 启动的时候一些特定的代码只执行一次, 比如在models, forms和model forms.
那么, 我们假设在模型定义的时候使用ugettext(), 而不是ugettext_lazy()会怎么样?
因为models的字段定义仅仅被执行一次,并且在执行定义代码的时候语言不是简体中文(一般是英文).
要避免这种行为,要必须正确的使用ugettext()和ugettext_lazy()
下面总结了, 在合适的地方使用合适的函数: