Я хочу изменить язык, когда пользователь представляет в URL локаль, что-то вроде этого http://example.com/es/, http://example.com/es/article-name, http://example.com/en/.
как я могу сделать это?
Оформить заказ django-locale-url .
Он предоставляет промежуточное ПО, которое делает именно то, что вы просите, поэтому вам не нужно проверять язык в urls.py
Несколько способов сделать это, которые приходят на ум. Возможно, наиболее «совместимым со стандартами» способом было бы использование заголовка HTTP Accept-Language
, который доступен для представлений как request.META ['HTTP_ACCEPT_LANGUAGE']
для определения языка в который пользователь предпочитает получать ресурсы и просто возвращать переведенный HttpResponse
на соответствующем языке.
Другой распространенный способ, более похожий на то, что вы описываете, - это попросить пользователя выбрать язык при его первом появлении и сохранить выбор в сеансе. Как только пользователь сделает выбор, перенаправьте браузер в подкаталог соответствующего языка и используйте относительные ссылки в своих представлениях, чтобы не беспокоиться о пересечении языков. Вы можете настроить URLconf для передачи ключевого слова языка в ваше представление следующим образом:
urlpatterns = patterns('',
(r'^(?P<lang>[a-zA-Z]{2})/ ...
На сайте документации Django по i18n есть страница Интернационализация / локализация , которая может помочь вам начать работу.