gpt4 book ai didi

python - Python Django 中的 makemessages 无法识别 ugettext 和 ugettext_lazy 函数

转载 作者:太空狗 更新时间:2023-10-29 21:13:50 33 4
gpt4 key购买 nike

我正在使用 Django 1.5.1,我在翻译时遇到了一些“奇怪的行为”。我在同一个 Python 文件中使用 ugettextugettext_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")

我的结论是:您只能对ugettextugettext_lazy 使用_ 别名(或任何其他相关的翻译函数)在 Django 中,否则它不会被 makemessages 命令 识别。技术解释可以在 Robert Lujo 的回答中找到。

谢谢!

最佳答案

Django 命令实用程序 makemessages 内部调用 xgettext像这样的程序:

cmd = (
'xgettext -d %s -L Python %s %s --keyword=gettext_noop '
'--keyword=gettext_lazy --keyword=ngettext_lazy:1,2 '
'--keyword=ugettext_noop --keyword=ugettext_lazy '
'--keyword=ungettext_lazy:1,2 --keyword=pgettext:1c,2 '
'--keyword=npgettext:1c,2,3 --keyword=pgettext_lazy:1c,2 '
'--keyword=npgettext_lazy:1c,2,3 --from-code UTF-8 '
'--add-comments=Translators -o - "%s"' %
(domain, wrap, location, work_file))

(来源可在 here 中找到)。因此,一些关键字由 xgettext 预定义实用程序(检查 --keyword 的引用资料):

  • 对于 python - gettext、ugettext、dgettext、ngettext、ungettext、dngettext,_

还有一些是由django实用程序添加的:

  • gettext_lazy、ngettext_lazy、ugettext_noop、ugettext_lazy、ungettext_lazy、pgettext、npgettext、pgettext_lazy、npgettext_lazy

关键字 trans 不在任何这些关键字集中,因此您不应该使用它来标记要翻译的文本。

关于python - Python Django 中的 makemessages 无法识别 ugettext 和 ugettext_lazy 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16509160/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com