我想使用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')),
我已经阅读了类似错误和错误的一些信息,但没有一个能解决我的问题。有线索吗?
答案 0 :(得分:1)
这是Django说“未找到所请求语言的翻译。”
你有没有运行compilemessages?