我正在使用 Django 1.5.1,并且在翻译时遇到了一些“奇怪的行为”。我在同一个 Python 文件中使用ugettext
和。ugettext_lazy
如果我将导入组织为:
from django.utils.translation import ugettext as trans
from django.utils.translation import ugettext_lazy as _
或者
from django.utils.translation import ugettext as trans, ugettext_lazy as _
trans("string")
运行makemessages
命令时会跳过标记为的字符串。
但是,如果我不重命名它,ugettext
它适用于两个版本:
from django.utils.translation import ugettext
from django.utils.translation import ugettext_lazy as _
或者
from django.utils.translation import ugettext, ugettext_lazy as _
现在trans("string")
效果很好。
那么,有人知道为什么这个导入重命名会导致重命名的函数不被调用吗?这是在同一模块中重命名多个函数时我不知道的实际 Python“限制”吗?
更新
经过一些测试,我意识到即使使用以下代码在应用程序中创建一个空的 python 模块也不起作用:
from django.utils.translation import ugettext_lazy as translate
a = translate("string")
但是,如果使用_
别名它可以工作:
from django.utils.translation import ugettext_lazy as _
a = _("string")
我的结论是:您只能在 Django 中使用and (或任何其他相关翻译函数)的_
别名,否则command将无法识别ugettext
ugettext_lazy
makemessages
。技术解释可以在 Robert Lujo 的回答中找到。
谢谢!