为什么Django本地化模板字符串会失败?

为什么Django本地化模板字符串会失败?,django,locale,Django,Locale,我有一个标准的本地化项目设置。在我的设置.py中定义了几种语言。我正在使用localemidware。我的模板文件中有几个{%blocktrans%}字符串,它们被拉入我的django.po文件中。我已经运行了django-admin.py compilemessages,并验证了.mo文件是否已创建 .po中没有“模糊”条目 在模板中,{%get_current_language as language_code%}{{language_code}}给出了正确的语言(在本例中,zh cn)

我有一个标准的本地化项目设置。在我的
设置.py
中定义了几种语言。我正在使用
localemidware
。我的模板文件中有几个
{%blocktrans%}
字符串,它们被拉入我的
django.po
文件中。我已经运行了
django-admin.py compilemessages
,并验证了
.mo
文件是否已创建

  • .po中没有“模糊”条目
  • 在模板中,
    {%get_current_language as language_code%}{{language_code}}
    给出了正确的语言(在本例中,
    zh cn
  • 我已重新启动[开发]服务器
  • 我有
    ENABLE\u I18N=True
    USE\u L10N=True
  • 我在
    settings.py中设置了
    LANGUAGE\u code
    LANGUAGES
当我呈现视图时,我知道选择了正确的语言环境,因为使用它的视图代码(
request.session.get('django\u language',settings.language\u code)
)获得了正确的代码。但是模板中字符串中的翻译不会显示出来


我该如何着手解决这个问题呢?

我不想问这个问题,但是,您是否在
设置.py中设置了
USE\u I18N=True


另外,您在问题中编写了
{%blocktranslate%}
,而它应该是
{%blocktranslate%}

鉴于所有这些,剩下的事情只有1)实际的翻译代码根本没有被调用(出于某种原因),或者2)它在完成工作之前退出


我随身带着一份Django的个人副本(即不是系统副本),这样我就可以将
打印
的内容深入到某个东西的内部。尝试在
django/templatetags/i18n.py
中添加一些
print
s,看看您是否真的到达了正确的位置。

结果表明,我错过了一些既明显又不明显的内容。有两种不同的标准在起作用。现在我已经修复了它,我的设置文件有:

LANGUAGES = (
    ('en', "English"),
    ('zh-CN', "中文")
)
但是我的语言环境目录是
locale/zh\u CN
。我愚蠢地认为在Django本地化过程中会使用相同的语言环境标准。我错了

进一步阅读:

使用连字符类型的文件:


使用下划线的文档。本页末尾的最后一段:

谢谢,但遗憾的是,这些都是键入问题时的错误。这些代码很难理解。不幸的是,在那里用pdb戳一下并没有多大帮助。@乔:查看Django 1.3.0中该文件的源代码,类
BlockTranslateNode
在第98行有一个方法
.render()
。有两个调用--
translation.ungettext()
在第110行和
translation.ugettext()
在第113行--这就是我要开始研究的地方。如果您根本没有到达那里,或者如果参数错误,那么问题就出在那里的上游(在执行的早期),否则就是下游。祝你好运,别担心,我修好了。头桌时刻。谢谢你的帮助。