Skip to main content
 首页 » 编程设计

python之在 Django 项目的同一个文件中使用 ugettext 和 ugettext_lazy

2024年09月07日36softidea

我正在翻译一个 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")