Django uggetext 作为 __ 而不是 _ 中断 makemessages
Django uggetext as __ instead of _ breaks makemessages
我刚遇到一个奇怪的错误 (?) 我最初遇到的是
from django.utils.translation import ugettext as _
我更改了
from django.utils.translation import ugettext as __
但是,令人惊讶的是,运行 ./manage.py makemessages --all
这样做后所有的翻译都中断了,它们基本上在我的 .po
文件中得到了所有注释,就好像它们没有被识别为翻译一样没有了。
回到 _
和 运行 makemessages
修复它。我不太明白为什么变量的名称很重要,我想知道当我需要两者时我应该如何命名我的 ugettext 和 ugettext_lazy,以保持一致性。
Django 1.8,python 2.7.14
那是因为 gettext
utility and more specifically of the xgettext
命令的内部结构。
简而言之,为了将字符串标记为可翻译,您必须将它们包装到特定的关键字中(即translate("hello world")
,translate
这里是关键字) . xgettext
程序适用于多种编程语言。每种语言都有自己的 predefined keywords(按 Ctrl + f
并搜索 --keyword
)。
在Python中,这些关键词是(注意最后的_
):
For Python: gettext
, ugettext
, dgettext:2
, ngettext:1,2
, ungettext:1,2
, dngettext:2,3
, _
xgettext
命令有几个选项可以改变它的行为。其中之一是 --keyword
选项。当您使用 --keyword
选项调用 xgettext
命令时,如果 python 文件中的所有字符串包含在预定义关键字之一或 --keyword
中,则它们将被视为可翻译] 你给的选项。例如,如果您 运行 xgettext --keyword=jimmy_hendrix
那么像 jimmy_hendrix("hello world")
这样的所有字符串都将包含在您的 .po
文件中。
但是,在 Django 中,您永远不会 运行 显式地使用此命令。您使用 makemessages
命令。查看 source of makemessages
command,您可以看到 Django 提供了额外的 --keyword
用于标记要翻译的字符串。其实这些关键字和Django的翻译附加功能是一样的
在所有这些之后,我认为现在很清楚别名 __
或 ___
将不起作用,因为它不在 Django 的 xgettext
命令调用列表中,也不在预定义的列表中xgettext
命令的关键字。
你可能会看一个过时的,but still valid answer。
还有一个例子xgettext
on MDN, using PHP。
我刚遇到一个奇怪的错误 (?) 我最初遇到的是
from django.utils.translation import ugettext as _
我更改了
from django.utils.translation import ugettext as __
但是,令人惊讶的是,运行 ./manage.py makemessages --all
这样做后所有的翻译都中断了,它们基本上在我的 .po
文件中得到了所有注释,就好像它们没有被识别为翻译一样没有了。
回到 _
和 运行 makemessages
修复它。我不太明白为什么变量的名称很重要,我想知道当我需要两者时我应该如何命名我的 ugettext 和 ugettext_lazy,以保持一致性。
Django 1.8,python 2.7.14
那是因为 gettext
utility and more specifically of the xgettext
命令的内部结构。
简而言之,为了将字符串标记为可翻译,您必须将它们包装到特定的关键字中(即translate("hello world")
,translate
这里是关键字) . xgettext
程序适用于多种编程语言。每种语言都有自己的 predefined keywords(按 Ctrl + f
并搜索 --keyword
)。
在Python中,这些关键词是(注意最后的_
):
For Python:
gettext
,ugettext
,dgettext:2
,ngettext:1,2
,ungettext:1,2
,dngettext:2,3
,_
xgettext
命令有几个选项可以改变它的行为。其中之一是 --keyword
选项。当您使用 --keyword
选项调用 xgettext
命令时,如果 python 文件中的所有字符串包含在预定义关键字之一或 --keyword
中,则它们将被视为可翻译] 你给的选项。例如,如果您 运行 xgettext --keyword=jimmy_hendrix
那么像 jimmy_hendrix("hello world")
这样的所有字符串都将包含在您的 .po
文件中。
但是,在 Django 中,您永远不会 运行 显式地使用此命令。您使用 makemessages
命令。查看 source of makemessages
command,您可以看到 Django 提供了额外的 --keyword
用于标记要翻译的字符串。其实这些关键字和Django的翻译附加功能是一样的
在所有这些之后,我认为现在很清楚别名 __
或 ___
将不起作用,因为它不在 Django 的 xgettext
命令调用列表中,也不在预定义的列表中xgettext
命令的关键字。
你可能会看一个过时的,but still valid answer。
还有一个例子xgettext
on MDN, using PHP。