2015-12-04 3 views
2

Я выполнил описанный подход 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 в сеансе, это не повлияет на будущий перевод страниц на правильный язык?

ответ

1

Я решил свою проблему следующим образом. Во-первых, изменилась форма:

<form action="{% url 'set_language' %}" method="post"> 
{% csrf_token %} 
<input name="language" type="hidden" value="{{ language.code }}" /> 
{% if request.path|slice:"4:"|length > 0 %} 
    <input name="next" type="hidden" value="/{{ language.code }}/{{ request.path|slice:"4:" }}" /> 
{% else %} 
    <input name="next" type="hidden" value="/" /> 
{% endif %} 
<input type="submit" value="{{ language.code }}" 
class="btn-link{% if language.code == LANGUAGE_CODE %} current{% endif %}" /> 
</form> 

Если пользователь выбирает язык с главной страницы, то следующее значение будет «/», если пользователь изменяет язык на других страницах, то он изменяет префикс языка.

Также я больше не использую ссылки в Mezzanine, потому что они не разрешены правильно в соответствии с текущим языком. Вместо ссылок я создал обычные Mezzanine Pages.

 Смежные вопросы

  • Нет связанных вопросов^_^