2011-11-22 22 views
2

好吧,两小时后尝试,我也会问...保存用户首选的语言和Django的localeurl

我有一个应用程序,我有它在几种语言。如果应用程序的默认语言是浏览器语言,但如果用户可以覆盖该语言,则会很好。

我的意思是说,你的浏览器是英文的,但你是德国人,你点击德国国旗来改变网页语言并记住它。

我试着用django-localeurl

它的工作原理确定,它告诉你在URL中的语言,甚至可以设置默认语言为浏览器语言。

当我创建一个选择框来改变语言,如django-locateurl说,问题来了。选择的作品,但当我移动到另一个页面时,语言会更改为默认的语言。不保存新的选定语言。

我尝试了一些宣称解决这个问题的叉子,原来的一个补丁..没有。

我读到把SessionMiddleware localeURLMiddleware之前,...

没有。

那么,任何人得到这个工作或使用另一个库为此?

谢谢。

回答

2

我使用Django-DEV(1.4结束),它建于国际化的网址,因此无需localeurl的。

0

django-cms使用中间件来做到这一点。为了寻找灵感,看看类MultilingualURLMiddleware这里:

https://github.com/divio/django-cms/blob/develop/cms/middleware/multilingual.py

它执行以下操作:

  1. 查找在URL的第一部分。如果它与您支持的语言(即settings.LANGUAGES)相匹配,则用该语言代码调用translation.activate(language)。
  2. 如果不是,请尝试查看是否设置了request.session.get(“django_language”,“”)。
  3. 如果不是,请尝试查看是否设置了request.COOKIES.get(“django_language”,“”)。

但我真的建议是,你开始使用Django-CMS)

+1

谢谢,但Django的CMS不适合每个项目..我的应用程序不适合在一个CMS,只是一个月经日历。 –

+0

即使您不使用django-cms,我仍然可以推荐复制他们的中间件并将其修改为独立。 – benjaoming

2

阅读以下文章。

http://barseghyanartur.blogspot.nl/2013/09/make-django-localeurl-rembember-your.html

总之,随着最后一个提交到Django的localeurl主枝和一些技巧,这是可能的。

第1步。从源代码安装django-localeurl(bitbucket)或从同一地点选择稍后提交。

$点子安装汞柱+ https://bitbucket.org/carljm/[email protected]#egg=django-localeurl

第2步:更新你的Django settings.py如下。

中间件类应如下所示(顺序非常关键)。

请注意,django的SessionMiddleware是第一个!而LocaleURLMiddleware应该在django的CommonMiddleware之前!

请注意,LOCALEURL_USE_SESSION是新的。

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'localeurl.middleware.LocaleURLMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    # ... the rest 
) 

LOCALEURL_USE_SESSION = True 

步骤3.直接语言切换(POST)至{%URL 'localeurl_change_locale' %}图,其具有设置选择为locale PARAM的语言。

就是这样。请参阅文章中的提示以将其包含在您的模板中。

+0

以下是感谢您的时间。一年前我离开了Django:P –

相关问题