设置django_language Cookie时出现LocaleMiddleware错误

问题描述:

我想使用LocaleMiddleware在模板层中获取用户首选语言,从而为每种语言显示不同的内容。根据django文档,LocaleMiddleware执行以下操作:设置django_language Cookie时出现LocaleMiddleware错误

  • 首先,它在请求的URL中查找语言前缀。只有在您的根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', 
) 

而下面的模式到set_language在urls.py重定向:

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

我读过一些信息类似的错误和错误,但他们都不能解决我的问题。任何线索?

+0

我发现了一些有趣的东西。也许这是因为我的开发机器。我正在使用Ubuntu 12.04和Django 1.4。它在我用root用户测试时正常工作,可能它与我的安装权限有关,我使用PIP安装了Django。 – 2012-07-17 13:41:44

+0

尝试查看错误的堆栈跟踪,以便您可以查看哪种对象缺少“_info”属性...如果足够长的跟踪它,则会找到答案;) – benjaoming 2012-07-17 15:48:11

这是Django的一种说法:“找不到所需语言的翻译”。

您是否运行过compilemessages?