Как получить все языки в URL Django I18N? - PullRequest
0 голосов
/ 24 октября 2018

Я подключил модуль шаблонов i18n к своим URL и добавил несколько языков:

urlpatterns += i18n_patterns(
    path('blog/', include('blog.urls')),
    path('contacts/', include('contacts.urls')),
    path('signup/', views.signup, name='signup'),
    path('login/', auth_views.login, {'template_name': 'login.html'}, name='login'),
    path('logout/', auth_views.logout, {'next_page': 'login'}, name='logout'),

)

LANGUAGES = (
    ('ru', 'Russian'),
    ('en', 'English'),
    ('es', 'Spain'),
)

Но единственный язык, который я вижу в URL, это язык, который я установил в параметре LANGUAGE_CODE, и единственная действительная ссылка, которую яу него есть ссылка с параметром language_code.Например, теперь я вижу «en», но мне нужно видеть «ru», «es» и т. Д. Что мне нужно с ним сделать, чтобы получить здесь все остальные языки?Если я установил prefix_default_language = False, чтобы я даже не смог получить язык по умолчанию (и все остальные соответственно), я получил ошибку Page not found (404), когда пытался использовать шаблон с формой set_language.Например, если у меня есть language_code == en, я получаю эту ошибку, когда пытаюсь переключить его на язык ru с помощью формы в моем шаблоне (у меня есть ссылка, такая как: address: port / ru / blog).Итак, похоже, мне нужно использовать представление, которое изменит язык по умолчанию.

[name='home']
languages/
admin/
en/
^media\/(?P<path>.*)$

template:

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

1 Ответ

0 голосов
/ 24 октября 2018

Я решил это.У меня было двойное СРЕДНЕГО ОБЪЕКТА в настройках.Нижний - без localemiddleware.

...