не работает автоматическое переключение языка при установке prefix_default_language=False

Рейтинг: 0Ответов: 1Опубликовано: 28.07.2023

проблема заключается в том, что автоматическое переключение языка не работает, когда prefix_default_language установлен в False, нужно чтобы при отключенном префиксе (prefix_default_language=False) язык автоматически переключался относительно языка браузера. Если префикс оставить, то всё отлично переключается. Использую django-modeltranslation. Помохите...

urls:

urlpatterns += i18n_patterns(
    path('i18n/', include('django.conf.urls.i18n')),
    path("", EventListView.as_view(), name="home"),
    path("events/", include("events.urls")),
    prefix_default_language=False
)

settings:

TIME_ZONE = "Europe/Moscow"
# https://docs.djangoproject.com/en/dev/ref/settings/#language-code
LANGUAGE_CODE = 'en'
# https://docs.djangoproject.com/en/dev/ref/settings/#site-id
SITE_ID = 1
# https://docs.djangoproject.com/en/dev/ref/settings/#use-i18n
USE_I18N = True
# https://docs.djangoproject.com/en/dev/ref/settings/#use-l10n
USE_L10N = True
# https://docs.djangoproject.com/en/dev/ref/settings/#use-tz
USE_TZ = False
# https://docs.djangoproject.com/en/dev/ref/settings/#locale-paths
LOCALE_PATHS = [ROOT_DIR.path("locale")]

gettext = lambda s: s
LANGUAGES = [
    ('ru', _('Russian')),
    ('en', _('English')),
    ('de', _('German')),
]
MODELTRANSLATION_DEFAULT_LANGUAGE = 'en'

MODELTRANSLATION_PREPOPULATE_LANGUAGE = 'en'

TRANSLATABLE_MODEL_MODULES = [
    'events.models'
]

Ответы

▲ 0

https://docs.djangoproject.com/en/stable/topics/i18n/translation/#explicitly-setting-the-active-language

Установка языка для конкретного пользователя. Забираем язык из браузера и применяем.

from django.conf import settings
from django.http import HttpResponse
from django.utils import translation

user_language = "fr"
translation.activate(user_language)
response = HttpResponse(...)
response.set_cookie(settings.LANGUAGE_COOKIE_NAME, user_language)

Еще можно посмотреть эту либу:

https://pypi.python.org/pypi/django-user-language-middleware/

Мидлваря, что использует поле языка в модели юзера для автоматического переключения.