Django建议文本为__而不是_ 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实用程序的内部,更具体地说是xgettext命令的内部。

简而言之,为了将字符串标记为可翻译字符串,您必须将它们封装在特定的关键字中(即translate("hello world"),这里的translate是关键字(。xgettext程序适用于多种编程语言。每种语言都有自己预定义的关键字(按Ctrl + f并搜索--keyword(。

在Python中,这些关键字是(注意末尾的_(:

对于Python:gettextugettextdgettext:2ngettext:1,2ungettext:1,2dngettext:2,3_

xgettext命令有几个选项可以改变它的行为。其中之一是--keyword选项。当您使用--keyword选项调用xgettext命令时,如果python文件中的所有字符串都封装在预定义的关键字或您提供的--keyword选项中,则它们将被视为可翻译。例如,如果运行xgettext --keyword=jimmy_hendrix,那么所有像jimmy_hendrix("hello world")这样的字符串都将包含在.po文件中。

但是,您永远不会在Django中显式地运行此命令。使用makemessages命令。查看makemessages命令的源代码,可以看到Django提供了额外的--keywords,用于标记要翻译的字符串。事实上,这些关键字与Django用于翻译的附加功能相同。

在所有这些之后,我认为现在很清楚,别名_____将不起作用,因为它不在Django的xgettext命令调用的列表中,也不在xgettext命令的预定义关键字中。

你可能会看到一个过时但仍然有效的答案。

此外,还提供了一个xgettext在MDN上使用PHP的示例。

相关内容

  • 没有找到相关文章

最新更新