django的i18n是如何实现的

时间:2021-01-05 17:57:04

在程序中出现 _的地方会调用gettext_lazy(django.utils.translation.py)

class LogEntry(models.Model):
action_time = models.DateTimeField(
_('action time'),
default=timezone.now,
editable=False,
)
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
models.CASCADE,
verbose_name=_('user'),

gettext_lazy = lazy(gettext, str) lazy函数返回一个懒对象,在调用from django.utils.encoding import force_text时,会根据setting文件决定是调用tran_real还是tran_null函数。

force_text函数会使懒对象即时翻译,从而达到国际化。