Продвинутый Django 5 для продолжающих

Прогресс по курсу:  0/193

7.5 Шаблоны URL-адресов для интернационализации
3 из 3 шагов пройдено

Шаблоны URL-адресов для интернационализации


Django предлагает возможности интернационализации URL-адресов. Они предусматривают две главные функциональности для интернационализированных URL-адресов:

  • префикс языка в шаблонах URL-адресов: добавление префикса языка в URL-адреса для раздачи каждой языковой версии под другим базовым URL-адресом;
  • переведенные шаблоны URL-адресов: перевод шаблонов URL-адресов таким образом, чтобы каждый URL-адрес по каждому языку отличался.

Одной из причин перевода URL-адресов является оптимизация сайта под поисковые системы. Добавив языковой префикс в свои шаблоны, можно индексировать URL-адрес на каждом языке вместо использования одного URL-адреса для всех.

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

Добавление префикса языка в шаблоны URL-адресов

Django позволяет добавлять префикс языка в шаблоны URL-адресов. Например, англоязычная версия сайта может размещаться по пути, начинающемуся с /en/, а русская версия – начинающемуся с /ru/.

В целях применения языков в шаблонах URL-адресов необходимо использовать предоставляемый веб-фреймворком Django класс LocaleMiddleware.
Django будет использовать его для идентификации текущего языка по запрошенному URL-адресу.
Ранее он был добавлен в настроечный параметр MIDDLEWARE проекта, так что это не нужно делать сейчас.


Давайте добавим префикс языка в шаблоны URL-адресов.
Отредактируйте главный файл core\urls.py проекта books_project, добавив i18n_patterns(), как показано ниже:

from django.contrib import admin
from django.urls import path, include
from django.conf.urls.i18n import i18n_patterns

urlpatterns = i18n_patterns(
    path('admin/', admin.site.urls),
    path('rosetta/', include('rosetta.urls')),
    path('', include('books.urls')),
)


Проверяем результат, перейдём по адресу http://127.0.0.1:8000/ru/:


А затем и http://127.0.0.1:8000/en/:

Как мы видим обе языковые версии нашего проекта прекрасно работают.


Непереводимые стандартные шаблоны URL-адресов и шаблоны можно комбинировать в рамках i18n_patterns, чтобы некоторые шаблоны содержали языковой префикс, а другие – нет.

Для нашего проекта это могло быть так:

from django.contrib import admin
from django.urls import path, include
from django.conf.urls.i18n import i18n_patterns


urlpatterns = [
    path('admin/', admin.site.urls),
    path('rosetta/', include('rosetta.urls')),
]

urlpatterns += i18n_patterns(
    path('', include('books.urls')),
)


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


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

2  одинаковые картинки вставили.

@Ilia_Boiarintsev, спасибо, исправил.