Python Django i18n:翻译未出现的常见原因
我正在制作一个多语言的Django网站。我创建了一个消息文件,填充并编译了它。我用我想要的语言(希伯来语)检查了网站(本例中是管理员),大多数短语都应该用希伯来语出现,但有些没有。我检查了源代码,它们仍然显示为Python Django i18n:翻译未出现的常见原因,python,django,translation,gettext,django-multilingual,Python,Django,Translation,Gettext,Django Multilingual,我正在制作一个多语言的Django网站。我创建了一个消息文件,填充并编译了它。我用我想要的语言(希伯来语)检查了网站(本例中是管理员),大多数短语都应该用希伯来语出现,但有些没有。我检查了源代码,它们仍然显示为。('Whatever'),就像它们应该显示的一样,它们也被翻译到消息文件中,是的,我记得做了编译消息 翻译不象这样出现的常见原因是什么?一个可能的原因是 例如,在views.py中,您应该使用ugettext: from django.utils.translation import u
。('Whatever')
,就像它们应该显示的一样,它们也被翻译到消息文件中,是的,我记得做了编译消息
翻译不象这样出现的常见原因是什么?一个可能的原因是
例如,在views.py中,您应该使用ugettext:
from django.utils.translation import ugettext as _
from django.utils.translation import ugettext_lazy as _
但是在models.py中,应该使用ugettext\u lazy:
from django.utils.translation import ugettext as _
from django.utils.translation import ugettext_lazy as _
可能翻译后的字符串被标记为
fuzzy
?嗨,请附上一些我过去必须做的修复:
- 重新启动Web服务器李>
需要使用_I18N=True
- 中间件模块中的django.middleware.locale.LocaleMiddleware(但只要django根本不关心您的本地模块,就不一定是这样)
- django.core.context_processors.i18n在模板_context_处理器之间
当然,我还有其他与翻译相关的问题,但我不记得所有的问题。。。希望这能有所帮助 另一个原因可能是错误的目录结构
在运行应用程序翻译的
makemassages
命令之前,请仔细阅读manage命令中有关要创建哪个目录的错误消息。(对于应用程序,它必须是locale
,而不是conf/locale
)请注意,即使目录结构错误,管理命令也可以正常工作。我注意到,当我的文本中有%
时,没有使用翻译文本。可能还有其他字符会导致此问题。我通过转义%%
解决了这个问题,因为%%
刚刚被一个问题击中。我在项目的根目录中有locale/
目录,但默认情况下在INSTALLED\u APPS
目录和默认翻译中。所以它没有找到我添加的翻译。但是我的一些字符串是Django附带的默认翻译(例如“搜索”),所以翻译了一些字符串,这让我很困惑
要将我的翻译所在的目录添加到Django将查找翻译的位置列表中,我必须设置。因此,在我的例子中,locale/
目录和settings.py
都位于django项目的根目录中,我可以将以下内容放入settings.py
:
from os import path
LOCALE_PATHS = (
path.join(path.abspath(path.dirname(__file__)), 'locale'),
)
我现在的项目有这个问题。我将settings.py上的变量语言设置为:
LANGUAGES = (
('en', _('English')),
('pt-br', _('Brazilian Portuguese')),
)
和一个文件夹结构,其中包含一个区域设置文件夹和一个子文件夹pt br。结果是我的翻译没有加载。LANGUAGES变量遵循pt br模式,文件夹必须位于pt_br模式上。至少这是它在这里工作的唯一方式 我试图提供一份完整的检查清单:
- 在
中,是否正确设置了settings.py
、USE\u I18N
、USE\u L10N
和LANGUAGE\u code
区域设置路径
- 有关语言标识符的所有允许值,请参阅。请注意,简体中文由
指定,而不是zh-hans
指定zh-cn
- 有关语言标识符的所有允许值,请参阅。请注意,简体中文由
- 在
中,是settings.py
包含在django.middleware.locale.localemidleware
中吗middleware
- 您是否(重新)使用正确的本地名称运行了django admin makemessages-l
- 通过在计算机上运行
,或者ls/path/to/python/site packages/django/conf/locale/
- 请注意,您必须在此处使用
而不是
。例如,要指定简体中文,请执行-
,而不是django admin makemessages-l zh_Hans
或zh_CN
或任何其他命令zh_Hans
- 通过在计算机上运行
- 您是否已删除采购订单文件中的所有
模糊标记
- 您是否使用django admin compilemessages重新编译了OP文件
- 您重新启动web服务器了吗
- 如果您的某些翻译被Django的默认翻译覆盖,请使用绕过它。比如说,
您将看到
姓代码>,名代码>而不是默认的姓氏代码>,名字
我的回答是,除了我在模型中使用的2个日期字段
外,我所有的翻译都有效。
原来我的forms.py
中有一个小部件不能很好地处理翻译
我只是暂时把它删除了,这样我就可以享受圣诞节了,谢谢,但这似乎不是问题所在。我登录到shell,然后执行ugettext(“我的表达式”)
,得到的是“我的表达式”
,而不是翻译。(是的,我在执行此操作之前激活了另一种语言,并确认我可以使用此函数翻译其他字符串。)你在作弊,Ofri:)是的,这是错过翻译的原因之一,谢谢。我也花了一段时间才弄清楚。不使用任何标记为“模糊”的条目。它们将由翻译人员审查,直到验证(通过移除模糊标志)为止,不会显示。+1!就我而言,我只需要重新启动服务器。我使用的是nginx+gunicorn组合。重新启动gunicorn就足够了。感谢在这里使用pt br(使用Django==1.10.5),我也遇到了同样的问题。包含“-”(连字符)的语言代码的正确模式是“\u”exmaple:pt\u BR
因此正确的命令是python manage。