Невозможно установить язык после использования i18n_pattern для отображения языкового префикса в URL-адресе

Как было предложено, я хочу показать префикс языка в URL-адресе и позволить посетителю моего сайта изменить язык с помощью формы в шаблоне. Я использовал разделы на Префикс URL и set_language перенаправить просмотр со страницы "Перевод" Django docs в качестве руководства на данный момент. Мой код в значительной степени скопирован из этого источника.


Проблема

Без использования «i18n_pattern» (имея оба вызова «url» в «шаблоне») в моем URLconf, мне удается выбрать язык на странице index.html, и Django перенаправляет меня на ту же страницу с новым языком, который я выбрал. Однако префикс URL-адреса языка, конечно же, не отображается.

Когда я использую «i18n_pattern», префикс языка появляется в URL-адресе, но, похоже, нарушает возможность изменения языка из формы index.html. Например, если я установил английский язык и изменил форму с «English (en)» на «Türkçe (tr)», страница по существу обновится без перехода на турецкий (английский все равно отображается). Однако я могу изменить язык, изменив префикс языка URL-адреса с «/en/» на «/tr/».

страницы/шаблоны/страницы/index.html:

{% load i18n %}
<html>
  <head>
  ...
  </head>
  <body>
    <form action="{% url 'set_language' %}" method="post">
    {% csrf_token %}
    <input name="next" type="hidden" value="{{ redirect_to }}" />
    <select name="language">
    {% get_language_info_list for LANGUAGES as languages %}
    {% for language in languages %}
    <option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected="selected"{% endif %}>
        {{ language.name_local }} ({{ language.code }})
     </option>
    {% endfor %}
    </select>
    <input type="submit" value="Go" />
    </form>

    ...

    </body>    
</html>


[имя_проекта]/urls.py:

from django.conf.urls import patterns, include, url 
from django.conf.urls.i18n import i18n_patterns

urlpatterns = patterns('',
    url(r'^i18n/', include('django.conf.urls.i18n')),
)

urlpatterns += i18n_patterns('',
    url(r'', include('pages.urls', namespace='pages')),
)

Примечание. Шаблоны, которые я использую, находятся в приложении под названием «страницы».

Будем признательны за любую помощь в их совместной работе! Я до сих пор не смог найти что-либо в stackoverflow, касающееся этой проблемы. Если нужна дополнительная информация, спрашивайте!


person Akyidrian    schedule 14.12.2014    source источник


Ответы (1)


Этот StackOverflow question содержит более подробную информацию и некоторые возможные ответы на проблему. Ни одно из решений не является действительно привлекательным; и не должно быть действительно требуется. К сожалению, это проблема с Django, когда обе желаемые «функции» не могут работать вместе «из коробки» с желаемым эффектом. В моем случае, поскольку мой сайт является одностраничным, я могу избежать установки переменной контекста с помощью «redirect_to» = '/' (в представлении), чтобы свести на нет проблему.

person Akyidrian    schedule 15.12.2014