在Django中使用多语言和地区URL
在使用django-multilingual和localeurl的时候,遇到了一些问题。
这是我主页面视图的一个小示例:
def main(request): #View for http://www.mysite.com/
name = Dog.objects.all()[0].full_name #this is a translated field
return render_to_response("home.html", {"name" : name})
当我访问 http://www.mysite.com/ 时,它会自动把我重定向到 http://www.mysite.com/ru/,这时候“name”这个变量会变成俄语的内容。现在这样还可以……
但是……
当我访问 http://www.mysite.com/en/ 时,却还是显示同样的俄语内容。
在我用调试工具进行实验时,我发现了以下几点:
- 根据网址后缀是/en/还是/ru/,request.LANGUAGE_CODE会正确变化(这多亏了localeurl)
- 调用 multilingual.languages.set_default_language() 会让“name”这个变量的语言发生变化
我的疑问是:我是不是需要在每个视图中手动把django-multilingual的语言改成request.LANGUAGE_CODE,还是说这个应该自动处理,而我做错了什么?
2 个回答
1
我把django.middleware.locale.LocaleMiddleware这个东西去掉后,问题也解决了...
3
我也遇到了同样的问题,调整了MIDDLEWARE_CLASSES中的顺序后,我得到了正确的顺序:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
#'django.middleware.locale.LocaleMiddleware',
'localeurl.middleware.LocaleURLMiddleware',
'multilingual.middleware.DefaultLanguageMiddleware',
'multilingual.flatpages.middleware.FlatpageFallbackMiddleware',
'django.middleware.common.CommonMiddleware',
)
我把'django.middleware.locale.LocaleMiddleware'这一行注释掉了,因为我觉得它和'localeurl.middleware.LocaleURLMiddleware'的作用是一样的。