Существует пакет под названием django-solid-i18n-urls, который будет делать то, что вы хотите.
Одно можно упомянуть: он не использует перенаправления вообще. Итак, если пользователь придет на сайт, а его предпочитаемый язык не будет en
(по умолчанию один из них установлен в settings.LANGUAGE_CODE
), но, например, fe
, он не будет перенаправлен на /fe/
, он должен сделать это вручную. Если вы все еще хотите использовать переадресацию, можно изменить код, к счастью, там не так много.
Вот как вы можете установить его (подробнее установить последовательность в readme):
1) pip install solid_i18n
2) Укажите язык для корневых адресов в settings.py: LANGUAGE_CODE = 'en'
3) Добавить SolidLocaleMiddleware вместо того, чтобы LocaleMiddleware MIDDLEWARE_CLASSES:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'solid_i18n.middleware.SolidLocaleMiddleware',
'django.middleware.common.CommonMiddleware',
)
4) Применение золь id_i18n_patterns вместо i18n_patterns
from django.conf.urls import patterns, include, url
from solid_i18n.urls import solid_i18n_patterns
# urls without language, this can be skipped
urlpatterns = patterns(''
# ...
)
# urls, that must have default language at root url and prefixes for other languages
urlpatterns += solid_i18n_patterns('',
url(r'^about/$', 'about.view', name='about'),
# ...
)
Этот blog работает с использованием упомянутого пакета, где корень URL (без префикса) визуализирует русский язык.
Article, почему переадресация не используется.
ОБНОВЛЕНО
Упомянутый пакет теперь SOLID_I18N_USE_REDIRECTS
вариант. Если True, предпочтительный язык будет обнаружен и перенаправлен на язык, отличный от языка по умолчанию, будет либо (если открытый язык равен умолчанию), будет показан url без префикса.