T
T
The Dragger2018-04-18 08:39:39
Django
The Dragger, 2018-04-18 08:39:39

How to set up multilanguage in django 2?

settings.py :

...
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'news.middleware.SimpleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
...
LANGUAGE_CODE = 'ru'
LANGUAGES = (
    ('ru', _("Русский")),
    ('en', _("English"))
)

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

URLs.py :
# Django
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.i18n import i18n_patterns

# Project
from news.views import hello

urlpatterns = [
    path('admin/', admin.site.urls),
    path('i18n/', include('django.conf.urls.i18n')),
]
urlpatterns += i18n_patterns(
    path('', hello),
    prefix_default_language=False,
)

views.py
from django.shortcuts import render
from django.http.response import HttpResponse
from django.utils.translation import get_language


def hello(request):
    return HttpResponse(get_language())

I run commands:
python3 manage.py makemessages -l ru
python3 manage.py makemessages -l ru
python3 manage.py compilemessages

I go to the page:
  • 127.0.0.1:8000 - Displays ru
  • 127.0.0.1:8000/en - Displays en
  • 127.0.0.1:8000/ru - Gives a 404 error

How to make it so that when entering the Russian version of the site /ru/ , a redirect to / occurs .
If the user goes to 127.0.0.1:8000/ru/foo-bar , he should be redirected to 127.0.0.1:8000/foo-bar
At what level is it best to do this? middleware or url ?

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question