Шаблоны 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-адреса.