如何判断 Django 忽略 Accept-Language 标头的原因?

2024-06-26

我有一个 Django 应用程序(在 Google App Engine 上),我希望将其国际化。

设置.py:

USE_I18N = True
LANGUAGE_CODE = 'en'

# Restrict supported languages (and JS media generation)
LANGUAGES = (
  ('en', 'English'),
  ('fr', 'French'),
)

MIDDLEWARE_CLASSES = (
  'ragendja.middleware.ErrorMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  # i18n
  'django.middleware.locale.LocaleMiddleware',
  ...

我已在 locale/fr/LC_MESSAGES 中为我​​的应用程序生成了 .po 和 .mo 文件(尽管不是在全局级别)。

我将浏览器接受语言标题设置为“fr”,Django 忽略它。当我查看 request.LANGUAGE_CODE 时,它始终是“en”。

我可以判断浏览器是正确的,因为我访问其他一些支持 i18n 的网站并且它返回法语。

如何找到 Django 认为我的设置缺少的内容?

I saw 这个问题 https://stackoverflow.com/questions/1230315/cant-switch-language-environment-in-django这对我没有帮助。

我正在 Google App Engine 上使用应用程序引擎补丁 1.0.2.2 运行 Django 1.0。


Django 根据 i18n 执行操作有一定的顺序。

首先它检查LANGUAGE_CODE。这是站点范围的语言,如果没有其他设置,这就是用户获得的语言。

其次,既然您添加了LocaleMiddleware,它检查是否django_language在用户会话中设置。我建议清除数据库中的会话信息或创建一个全新的用户来尝试。

第三,它检查是否存在django_languagecookie 集(或者实际上,cookie 的名称由LANGUAGE_COOKIE_NAME)。我建议删除这个cookie。

第四,它寻找Accept-LanguageHTTP 标头。这就是您的浏览器设置的用武之地。

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何判断 Django 忽略 Accept-Language 标头的原因? 的相关文章

随机推荐