Django 国际化未生效

5
我无法在我的模板中显示翻译内容。以下是我所做的:
  1. 在我的模板文件(index.html)中,我已经加载了i18n并在需要翻译的地方使用了transtag。
  2. 在我的项目目录中,我运行了./manage.py makemessages -l es
  3. 我的django.po文件在./conf/locale/es/LC_MESSAGES/django.po
  4. 我用翻译编辑了这个文件。
  5. 然后我运行了./manage.py compilemessages
  6. 我在settings.py中将LANGUAGE_CODE设置为'es'
  7. 在SessionMiddleware和CommonMiddleware之间的MIDDLEWARE_CLASSES中添加了django.middleware.locale.LocaleMiddleware
  8. 重启Django,刷新页面。
只有英文表示仍在显示。我错过了什么吗?我的做法有问题吗?
3个回答

5

2
Django的LocaleMiddleware尝试从给定的请求中确定语言环境,并相应地替换LANGUAGE_CODE。它按照以下步骤进行:
1.检查会话中是否存在名为django_language的会话变量。在此会话中将语言设置为给定的语言环境。如果不存在,则转到步骤2。
2.检查cookie是否设置了类似的变量(您可以自定义名称)。如果不存在,则转到步骤3。
3.尝试从HTTP_ACCEPT_LANGUAGE头中确定语言环境。如果不可能,它将进入步骤4。
4.最后,它将使用LANGUAGE_CODE设置作为给定的语言环境。
除步骤4之外的所有步骤都会检查语言是否在LANGUAGES设置中给出,该设置是表示语言代码和语言标题的2元组的元组。确保设置/覆盖默认值,因为默认值将是所有可用Django语言的元组。
如果您的Django站点有多种语言,请确保正确设置会话或cookie。您可以使用Django的内部视图来设置语言(django.views.i18n.set_language)。
如果您只有一种语言(例如西班牙语),则通常不需要担心这个问题。只需确保LANGUAGES和LANGUAGE_CODE已设置即可。如果在LANGUAGES中未提供浏览器语言,则不会尝试将页面语言设置为浏览器语言。此外,您应确保USE_I18N = True。尽管如此,但至少要确保您没有在某个地方将其设置为False。

1
是的。我已经按照所有步骤做了...但似乎还是无法翻译。这让我很疯狂。我确定我错过了一些不在列表上或者比较隐晦的东西。也许睡一觉后就能解决了... - intargc

0

好的,我找到问题了...我的po文件在./conf/locale而不是./locale目录下。

我创建./conf/locale的原因是因为当我运行django-admin.py makemessages时,它告诉我要这样做。但是如果它在你的本地项目目录中,那么它只需要放在./locale目录下。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接