Django i18n无法正常工作

时间:2011-10-19 23:19:55

标签: python django internationalization

我无法获得翻译以显示我的模板。这就是我所做的:

  1. 在我的模板文件(index.html)中,我已经加载了i18n并在我需要翻译的地方使用了trans标记。
  2. 在我的项目目录中,我rand ./manage.py makemessages -l es
  3. 我的django.po文件位于./conf/locale/es/LC_MESSAGES/django.po
  4. 我用翻译编辑了这个文件。
  5. 然后我跑了./manage.py compilemessages
  6. 我在settings.py
  7. 中将LANGUAGE_CODE设置为'es'
  8. 在SessionMiddleware和CommonMiddleware之间向django.middleware.locale.LocaleMiddleware添加了MIDDLEWARE_CLASSES
  9. 重新启动Django,刷新了我的页面。
  10. 只有英语陈述仍在显示。我在这做错了什么?我错过了什么?

3 个答案:

答案 0 :(得分:4)

您是否尝试在设置文件中设置LOCALE_PATHS?这为我修好了...有关详细信息,请查看an answer I wrote for a similar question或django的official documentation for the LOCALE_PATHS setting

答案 1 :(得分:2)

Django的LocaleMiddleware尝试根据给定的请求确定语言环境,并相应地替换LANGUAGE_CODE。它通过以下步骤:

  1. 检查会话中是否有名为django_language的会话变量。在此会话中将语言设置为给定的语言环境。如果不存在则转到2。
  2. 检查Cookie是否有类似的变量集(您可以自己定义名称)。它不存在它到3。
  3. 尝试从HTTP_ACCEPT_LANGUAGE标题中确定语言。如果不可能,它将转到4。
  4. 最后,它将使用LANGUAGE_CODE设置作为给定的区域设置。
  5. 在除4之外的所有步骤中,它将检查语言是否在LANGUAGES设置中给出,该设置是表示语言代码和语言标题的2元组的元组。确保设置/覆盖默认值,因为默认值是所有可用Django语言的元组。

    如果您的Django网站中有多种语言:

    确保您的会话或Cookie设置正确。您可以使用Django的内部视图来设置语言(django.views.i18n.set_language)。

    如果您只有一种语言:

    如果你只有西班牙语,你通常不需要为此烦恼。只需确保设置LANGUAGESLANGUAGE_CODE即可。如果LANGUAGES中未提供页面语言,则不会尝试将页面语言设置为您的浏览器语言。此外,您应该确保USE_I18N = True。这应该是默认值,所以至少要确保你没有将它设置为某个地方的False

答案 2 :(得分:0)

好的,我发现了问题...我的po文件位于./conf/locale而不只是./locale

我创建./conf/locale的原因是因为当我django-admin.py makemessages时,它指示我这样做。但是,如果它位于您的本地项目目录中,那么它只是./locale