Я выполнил описанный подход here.Проблема с переводом в Django + Mezzanine
На индексной странице у меня есть форма, которая позволяет мне переключаться между языками сайта. Я добавил «следующий» пост атрибут разрешить перенаправление на правильную языковую версию страницы.
<form action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<input name="language" type="hidden" value="{{ language.code }}" />
<input name="next" type="hidden" value="/{{ language.code }}/{{ request.path|slice:"4:" }}" />
<input type="submit" value="{{ language.code }}"
class="btn-link{% if language.code == LANGUAGE_CODE %} current{% endif %}" /></form>
У меня есть собственный вид set_language, как описано в первой ссылке. Ниже приведена последняя часть представления, в которой LANGUAGE_SESSION_KEY хранится в сеансе.
if language and check_for_language(language):
if hasattr(request, 'session'):
request.session[LANGUAGE_SESSION_KEY] = language
else:
response.set_cookie(settings.LANGUAGE_COOKIE_NAME, language)
return response
Мой urls.py выглядит следующим образом:
urlpatterns = i18n_patterns("",
("^admin/", include(admin.site.urls)),
("^", include("mezzanine.urls")),
url("^$", "mezzanine.pages.views.page", {"slug": "/"}, name="home"),
)
В общем подходе работает отлично. Когда пользователь находится на индексной странице, он может изменить язык и перенаправляется на нужную страницу.
Первой проблемой является Mezzanine Links. Если пользователь нажимает на ссылку, то он перенаправляется на язык, определенный LANGUAGE_CODE, в settings.py. В то же время, если пользователь нажимает на пункт меню Mezzanine Page, тогда все в порядке.
Вторая проблема заключается в том, что пользователь нажимает на ссылку Mezzanine home. В этом случае пользователь также перенаправляется на версию сайта, определенную LANGUAGE_CODE.
Вопрос в том, почему после того, как я установил LANGUAGE_SESSION_KEY в сеансе, это не повлияет на будущий перевод страниц на правильный язык?