我刚碰到一只奇怪的虫子(?)一开始我有
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
发布于 2018-09-21 14:50:59
这是因为gettext实用程序的内部,更具体地说是xgettext命令的内部。
简而言之,为了将字符串标记为可翻译的,您必须将它们包装在特定的关键字中(例如,translate("hello world"),translate这里是关键字)。xgettext程序适用于许多编程语言。每种语言都有自己的预定义关键词 (按Ctrl + f并搜索--keyword)。
在Python中,这些关键字是(请注意末尾的_ ):
gettext,ugettext,dgettext:2,ngettext:1,2,ungettext:1,2,dngettext:2,3,_
xgettext命令有几个选项可以改变它的行为。其中之一是--keyword选项。当您使用xgettext选项调用--keyword命令时,如果将它们包装在预先定义的关键字中或您提供的--keyword选项中,那么python文件中的所有字符串都将被视为可翻译的。例如,如果运行xgettext --keyword=jimmy_hendrix,那么像jimmy_hendrix("hello world")这样的所有字符串都将包含在.po文件中。
但是,您永远不会显式地在Django中运行这个命令。使用makemessages命令。查看命令,您可以看到Django提供了额外的--keyword来标记用于翻译的字符串。事实上,这些关键字与Django的额外翻译功能相同。
在所有这些之后,我认为现在很清楚,混叠__或___不能工作,因为它不在Django的xgettext命令调用列表中,也不在xgettext命令的预定义关键字中。
你可以看看一个过时的,但仍然有效的答案。
另外,关于MDN,使用PHP的一个例子。
https://stackoverflow.com/questions/51686641
复制相似问题