出于某种奇怪的原因,如果我在格式化字符串文字(F 字符串)中使用
django.po
或 gettext
,Django 会从 gettext_lazy
文件中删除翻译!
例如:
from django.contrib.admin import admin
from django.utils.translation import gettext_lazy as _
class fooAdmin(admin.ModelAdmin):
def bar(self, foo):
return format_html(f'''{_("Variable")}: {value1}<br />''')
当我通过
python manage.py makemessages --all --symlinks
更新消息时,Django 会从 Variable
翻译文件中删除 django.po
,只要 Variable
不在上面的代码之外的任何其他地方使用!
这是为什么?
这是 Django 翻译机器使用的
xgettext
的限制; (截至撰写本文时)它还不支持 Python f 字符串,因此不知道如何从其中提取字符串。请参阅 Django 文档中本节的结尾。
它从
django.po
文件中消失的原因是,当以前存在的源字符串消失时(因为 xgettext
不再看到它,所以它在这里有效地执行),它要么在末尾变成注释过时的字符串.po 文件,或将 --no-obsolete
参数设置为 makemessages
,完全删除。