Сохранение предпочитаемого пользователем языка и django-localeurl - PullRequest
2 голосов
/ 22 ноября 2011

Хорошо, после двух часов попыток, я спрошу ...

У меня есть приложение на нескольких языках. Было бы хорошо, если бы языком приложения по умолчанию был язык браузера, но было бы хорошо, если бы пользователь мог перезаписать этот язык.

Я имею в виду, что ваш браузер на английском, но вы немец, и вы нажимаете на Немецкий флаг, чтобы изменить веб-язык и запомнить это.

Я пробовал с django-localeurl

Работает нормально, показывает URL в URL, и даже вы можете установить, что языком по умолчанию является язык браузера.

Проблема возникает, когда я создаю поле выбора для изменения языка, как говорит django-locateurl. Выбор работает, но когда я перехожу на другую страницу, язык меняется на язык по умолчанию. Не сохраняет новый выбранный язык.

Я попробовал несколько вилок, которые утверждают, что исправили это, патч оригинала .. Ничего.

Я читал о размещении SessionMiddleware перед localeURLMiddleware, ...

Ничего.

Итак, кто-нибудь получил эту работу или использовал другую библиотеку для этого?

Спасибо.

Ответы [ 4 ]

2 голосов
/ 23 ноября 2011

Я закончил с использованием Django-dev (1.4), в него встроены URL-адреса i18n, поэтому не нужно использовать localeurl.

2 голосов
/ 18 сентября 2013

Прочитайте следующую статью.

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

Короче говоря, это возможно с одним из последних коммитов в основную ветку django-localeurl и некоторыми хитростями.

Шаг 1. Установите django-localeurl из источника (bitbucket) или выберите более поздний коммит из того же места.

$ pip install hg + https://bitbucket.org/carljm/django-localeurl@764caf7a412d77aca8cc929988f333ee808719e6#egg=django-localeurl

Шаг 2. Обновите django settings.pyследующим образом.

Классы промежуточного программного обеспечения должны выглядеть следующим образом (порядок важен).

Обратите внимание, что у Джанго SessionMiddleware на первом месте!И LocaleURLMiddleware должен предшествовать CommonMiddleware!

в django. Обратите внимание, что 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.

Вот и все.В статье приведены советы по включению его в шаблон.

0 голосов
/ 10 апреля 2018

Перевод приложения Django с предпочитаемым языком, выбранным зарегистрированным пользователем, можно выполнить с помощью промежуточного программного обеспечения django-user-language-middleware . Это позволяет легко локализовать ваше приложение Django, посмотрев на выбранный язык в поле user.language.

Использование:

  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',
        ...
    ]
    

Я надеюсь, что это может помочь людям в этом вопросе в будущем.

0 голосов
/ 22 ноября 2011

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;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...