2011-06-30 34 views
0

我有一个标准的本地化项目设置。我在我的settings.py中定义了几种语言。我正在使用LocaleMiddleware。我在我的模板文件中有几个{%blocktrans%}字符串,这些字符串被拉进我的django.po文件中。我运行了django-admin.py compilemessages并验证了.mo文件已创建。为什么Django本地化的模板字符串失败?

  • .po中没有'模糊'条目。
  • 在模板中,{% get_current_language as LANGUAGE_CODE %}{{LANGUAGE_CODE}}
  • 我已经重新启动了[发展]服务器
  • 我有ENABLE_I18N = TrueUSE_L10N = True
  • 我在settings.py
  • 设置 LANGUAGE_CODELANGUAGES正确的语言(在这种情况下, zh-cn

当我渲染视图时,我知道选择了正确的语言环境,因为使用它的视图代码(request.session.get('django_language', settings.LANGUAGE_CODE))获取正确的代码。但模板中的字符串翻译只是不显示。

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

回答

1

原来我错过了同时显而易见并不明显的东西。工作中有两种不同的标准。现在我已经固定它,我的设置文件有:

LANGUAGES = (
    ('en', "English"), 
    ('zh-CN', "中文") 
) 

但我的环境目录locale/zh_CN。我愚蠢地认为在整个Django本地化中将使用相同的区域标准。我错了。

进一步阅读:

文件在使用连字符类型:其中使用下划线https://code.djangoproject.com/browser/django/trunk/django/conf/global_settings.py

文档。非常最后一段在这个页的末尾:https://docs.djangoproject.com/en/dev/topics/i18n/deployment/

0

我不想问这个,但是,你有没有在settings.py中设置USE_I18N = True

另外你在你的问题中写道{%blocktranslate%},而应该是{% blocktrans %}

+0

谢谢,但可悲的是,在输入问题的唯一错误。 – Joe

0

鉴于所有这一切,剩下的唯一的东西是:1)实际转换代码是不是有人叫(出于某种原因),或2)它在完成工作之前已经开始救助了。

我保留Django的个人副本(即不是系统副本),所以我可以坚持print深入到某种东西的内核中。尝试在django/templatetags/i18n.py中放入一些print,看看你是否真的到达了正确的地方。

+0

谢谢,我会给它一个。 – Joe

+0

这段代码真的很难遵循。在pdb附近捅了一跤并没有多大的帮助。 – Joe

+0

@Joe:在Django 1.3.0中查看该文件的源代码,类“BlockTranslateNode”在98行有一个'.render()'方法。有2个调用 - 'translation.ungettext()'在行110和'translation.ugettext()'在113 - 这就是我开始调查的地方。如果根本没有达到目标,或者参数错误,那么问题就出在上游(在执行之前),否则就是下游。祝你好运。 –

相关问题