我正在翻译一个 Django 项目。几乎一切正常。我只是无法让 Django 收集标有 _(下划线)以外的字符串。
让我再解释一下:按照文档的规定,我正在使用 ugettext 和 ugettext_lazy。我想我已经很清楚我应该使用 ugettext_lazy 的原因和位置,但在某些模型中,我可以在一个地方使用 ugettext 而在另一个地方使用 ugettext_lazy另一个地方(例如因为第一个是在用户发出请求时才请求的函数中,第二个是模型定义的一部分(例如字段名))。
所以我是这样做的
from django.utils.translations import ugettext as _
from django.utils.translations import ugettext_lazy as _l
class MyModel():
myfield = CharField(..., verbose_name=_l("My Field"), ...)
# Here it is needed to use the lazy version
def edit_my_model():
msg = _('You are going to edit this model')
# For performance, I prefer to use the non-lazy version when I can
....
只要我有包含所有翻译的 .po 文件,一切都会正常进行。但我的问题是将这些翻译放在 .po 文件中。事实上,当我运行 django-admin makemessages 来收集所有标记的字符串时,它只收集“非惰性”字符串(标有 _ 的字符串),甚至删除它们我之前手动添加过。
有谁知道告诉 django-admin 也收集 ugettext_lazy 标记的字符串,或者我会被迫在我的文件中只有 ugettext_lazy as _ (并替换所有非惰性字符串)?
谢谢
请您参考如下方法:
问题是 _l 别名。
只导入 ugettext_lazy 没有任何别名:
from django.utils.translation import ugettext as _
from django.utils.translation import ugettext_lazy
short_description = _("Price")
caption=ugettext_lazy("Copy link")
