Добавление префикса языка к шаблонам URL-адресов
Джанго позволяет добавить префикс языка к шаблонам URL-адресов. Например, английская версия веб-узла может начинаться с /en/ ,а испанскоя с /es/.
Чтобы использовать языки в шаблонах URL-адресов, необходимо убедиться в том, что django.middleware.locale.LocaleMiddleware указан в параметрах MIDDLEWARE_CLASSES в файле settings.py. Джанго будет использовать его для идентификации текущего языка по запрошенному URL-адресу.
Давайте добавим префикс языка к шаблонам URL-адресов. Отредактируйте основной файл urls.py проекта myshop и добавьте следующий импорт:
from django.conf.urls.i18n import i18n_patterns
Затем добавьте i18n_patterns() следующим образом:
urlpatterns = i18n_patterns(
url(r'^admin/', include(admin.site.urls)),
url(r'^cart/', include('cart.urls', namespace='cart')),
url(r'^orders/', include('orders.urls', namespace='orders')),
url(r'^payment/', include('payment.urls', namespace='payment')),
url(r'^paypal/', include('paypal.standard.ipn.urls')),
url(r'^coupons/', include('coupons.urls', namespace='coupons')),
url(r'^rosetta/', include('rosetta.urls')),
url(r'^', include('shop.urls', namespace='shop')),
)
Шаблоны URL-адресов можно комбинировать в patterns() и в разделе i18n_patterns(), чтобы некоторые шаблоны включали префикс языка, а другие — нет. Однако лучше использовать переведенные URL-адреса только для того, чтобы избежать возможности того, что неосторожно переведенный URL-адрес соответствует непереведенному шаблону URL-адреса.
Запустите сервер разработки и откройте в браузере http://127.0.0.1:8000/ . Поскольку вы используете LocaleMiddleware Джанго, выполнит действия, описанные в главе "Как добавить переводы в проект Джанго", чтобы определить текущий язык, а затем перенаправит вас на тот же URL-адрес, включая префикс языка. Рассмотрим URL-адрес в браузере; Теперь он должен выглядеть как http://127.0.0.1:8000/en/. Текущий язык будет установлен в заголовке Accept-Language для браузера, если он является испанским или английским, или по умолчанию LANGUAGE_CODE(английский), в противном случае - определяемый в настройках.