首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django uggetext为__而不是_ breaks

Django uggetext为__而不是_ breaks
EN

Stack Overflow用户
提问于 2018-08-04 14:41:00
回答 1查看 84关注 0票数 0

我刚碰到一只奇怪的虫子(?)一开始我有

代码语言:javascript
复制
from django.utils.translation import ugettext as _

我换了一个

代码语言:javascript
复制
from django.utils.translation import ugettext as __

但是,令人惊讶的是,运行./manage.py makemessages --all之后,破坏了所有的翻译,它们基本上都会在我的.po文件中得到注释,就好像它们不再是翻译一样。

返回到_并运行makemessages修复了它。我不太明白为什么变量的名称重要,我想知道在需要时如何命名ugettext和ugettext_lazy,以保持一致性。

Django 1.8,附带python 2.7.14

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-21 14:50:59

这是因为gettext实用程序的内部,更具体地说是xgettext命令的内部。

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

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

gettextugettextdgettext:2ngettext:1,2ungettext:1,2dngettext: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的一个例子。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51686641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档