保存用户首选语言和django-localeurl

时间:2011-11-22 16:21:23

标签: django internationalization django-localeurl

好的,经过两个小时的尝试,我会问......

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

我的意思是,您的浏览器是英文的,但您是德语,并且您点击德国国旗更改网络语言并记住它。

我尝试了django-localeurl

它工作正常,它会显示网址上的语言,甚至可以设置默认语言是浏览器语言。

当我创建一个改变语言的选择框时,问题就出现了,就像django-locateurl所说的那样。选择有效但当我移动到另一个页面时,语言将更改为默认语言。不保存新选择的语言。

我尝试了一些声称可以解决这个问题的问题,一个原始补丁。没什么。

我读过有关在localeURLMiddleware之前放置SessionMiddleware,......

没有

那么,任何人都有这个工作或使用过另一个lib吗?

感谢。

4 个答案:

答案 0 :(得分:2)

我结束使用Django-dev(1.4),它内置了i18n网址,因此不需要localeurl。

答案 1 :(得分:2)

阅读以下文章。

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

简而言之,最后一次提交django-localeurl主分支和一些技巧是可能的。

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

$ pip install hg + https://bitbucket.org/carljm/django-localeurl@764caf7a412d77aca8cc929988f333ee808719e6#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参数的语言。

这就是它。请参阅文章,了解将其包含在模板中的提示。

答案 2 :(得分:0)

django-cms使用中间件来做到这一点。如需灵感,请在此处查看MultilingualURLMiddleware类:

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

它执行以下操作:

  1. 查看网址的第一部分。如果它与您支持的语言(即.settings.LANGUAGES)匹配,则使用该语言代码调用translation.activate(语言)。
  2. 如果没有,请尝试查看是否设置了request.session.get(“django_language”,“”)。
  3. 如果没有,请尝试查看是否设置了request.COOKIES.get(“django_language”,“”)。
  4. 但我真正推荐的是你开始使用django-cms;)

答案 3 :(得分:0)

使用中间件django-user-language-middleware可以使用注册用户选择的首选语言翻译Django应用程序。通过查看user.language字段中的所选语言,可以轻松实现Django应用程序的本地化。

用法:

  1. 为您的用户模型添加语言字段:

    class User(auth_base.AbstractBaseUser, auth.PermissionsMixin):
        # ...
        language = models.CharField(max_length=10,
                                    choices=settings.LANGUAGES,
                                    default=settings.LANGUAGE_CODE)
    
  2. 从pip安装中间件:

    pip install django-user-language-middleware

  3. 将其添加到设置中的中间件类列表以侦听请求:

    MIDDLEWARE = [  # Or MIDDLEWARE_CLASSES on Django < 1.10
        ...
        'user_language_middleware.UserLanguageMiddleware',
        ...
    ]
    
  4. 我希望将来可以帮助人们登陆这个问题。