Изменение языка с помощью "/ i18n / setlang /" ajax POST ничего не делает в Firefox - PullRequest
0 голосов
/ 15 мая 2018

Мой бэкэнд использует Django, а мой интерфейс сделан с ReactJS.

Когда пользователи меняют язык своего профиля, я выполняю вызов POST ajax на /i18n/setlang/ с объектом данных {language: [language_code]} и обновляю страницу.

У меня просто есть этот вызов ajax для изменения языка, набор файлов .po / .mo с переводами, и я использую gettext () для перевода строк в JS.

Это прекрасно работает в Chrome, но полностью игнорируется в Firefox и перевод не выполняется.Любая идея, почему?

Мое промежуточное ПО содержит django.middleware.locale.LocaleMiddleware, и мой LOCALE_PATH установлен следующим образом:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

LOCALE_PATHS = [
    os.path.join(BASE_DIR, 'locale')
]

ОБНОВЛЕНИЕ

В Chrome значение request.META['HTTP_ACCEPT_LANGUAGE'] is

fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7,pl;q=0.6

(все языки, которые я поддерживаю), тогда как в Firefox он возвращает:

en,en-US;q=0.5

Все еще не уверенпочему ...

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Мне удалось решить эту проблему, сохранив пользовательские настройки в базе данных при выполнении вызова AJAX, а затем обновив значение session[translation.LANGUAGE_SESSION_KEY], когда пользователь получает представление главной страницы.

from django.utils import translation

class MainPageView(TemplateView):
    template_name = 'index.html'

def get(self, request, *args, **kwargs):
    if not request.user.is_authenticated:
        return super(MainPageView, self).get(self, request, *args, **kwargs)

    profile = request.user.profile

    if profile.preferred_language is None or profile.preferred_language == "":
        profile.preferred_language = request.LANGUAGE_CODE
        profile.save()
    else:
        request.session[translation.LANGUAGE_SESSION_KEY] = profile.preferred_language

    return super(MainPageView, self).get(self, request, *args, **kwargs)
0 голосов
/ 15 мая 2018

В этой проблеме ошибка Firefox

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