2

Ok, after two hours of trying, Im gonna ask...

I have an app and I have it on several languages. Would be good if the default language of the app is the browser language but would be good too if an user can overwrite that language.

I mean, your browser is in English but you're German and you click on the German Flag to change the web language and remember that.

I tried with django-localeurl

It works OK, it show you the language on the url and even you can set that the default language is the browser language.

The problem come when I create a select box to change the language like the django-locateurl says. The select works but when I move to another page, the language changes to the default one. Doesn't save the new selected language.

I tried some forks that claims to fix that, a patch of the original one.. Nothing.

I read about putting SessionMiddleware before localeURLMiddleware, ...

Nothing.

So, anyone got this working or have used another lib for this?

Thanks.

4

4 回答 4

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。

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

请注意,djangoSessionMiddleware是第一位的!并且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参数的语言。

差不多就是这样。有关将其包含在模板中的提示,请参阅文章。

于 2013-09-17T22:58:25.580 回答
2

我结束了使用 Django-dev (1.4),它内置了 i18n url,所以不需要 localeurl。

于 2011-11-23T01:09:36.030 回答
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 ;)

于 2011-11-22T19:12:34.687 回答
0

使用注册用户选择的首选语言翻译 Django 应用程序可以使用中间件django-user-language-middleware完成。这允许通过查看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',
        ...
    ]
    

我希望这可以帮助人们将来解决这个问题。

于 2018-04-10T15:45:37.510 回答