设置django_language cookie时出现LocaleMiddleware错误

时间:2012-07-17 13:27:42

标签: django internationalization middleware

我想使用LocaleMiddleware在模板层中获取用户首选语言,为每种语言显示不同的内容。根据django文档,LocaleMiddleware执行以下操作:

  • 首先,它在请求的URL中查找语言前缀。只有在root URLconf中使用i18n_patterns函数时才会执行此操作。有关语言前缀以及如何国际化URL模式的详细信息,请参阅国际化:URL模式。

  • 如果失败,它会在当前用户的会话中查找django_language键。

  • 如果失败,就会找到一个cookie。使用的Cookie名称由LANGUAGE_COOKIE_NAME设置设置。 (默认名称为django_language。)

  • 如果失败,它会查看Accept-Language HTTP标头。此标头由您的浏览器发送,并按优先级顺序告诉服务器您喜欢哪种语言。 Django尝试标题中的每种语言,直到找到可用翻译的语言。

  • 如果失败,则使用全局LANGUAGE_CODE设置。

它在使用Accept-Language标头时似乎正常工作。但是,当我访问set_language重定向时,LocaleMiddleware启动失败并出现以下错误:

AttributeError at /
'NoneType' object has no attribute '_info'

如果我从中间件列表中排除LocaleMiddleware或清除浏览器cookie,则在我再次转到set_language重定向之前,错误不再出现。

这是我的配置:

settings.py

LANGUAGE_CODE = 'en-us'

USE_I18N = True

LANGUAGES = (
    ('en', 'English'),
    ('es', 'Español'),
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    #Uncomment the next line for simple clickjacking protection:
    #'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

以下模式为urls.py中的set_language重定向:

(r'^i18n/', include('django.conf.urls.i18n')),

我已经阅读了类似错误和错误的一些信息,但没有一个能解决我的问题。有线索吗?

1 个答案:

答案 0 :(得分:1)

这是Django说“未找到所请求语言的翻译。”

你有没有运行compilemessages?