Проблема обновления URL и страницы для многоязычного сайта на Django
Пожалуйста, помогите мне решить один вопрос. У меня есть многоязычный сайт на Django со стандартным фреймворком интернационализации.
Settings.py
MIDDLEWARE = [
...
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware'
...]
LANGUAGES = (
('en', _('English')),
('ja', _('Japanese')),
)
LANGUAGE_CODE = 'en'
USE_I18N = True
USE_L10N = True
LOCALE_PATHS = ['../locale/']
Все файлы *.mo и *.po для обоих языков успешно созданы.
в файле main.html есть фрагмент кода для переключения языка:
{% get_current_language as CURRENT_LANGUAGE %}
{% get_available_languages as AVAILABLE_LANGUAGES %}
{% get_language_info_list for AVAILABLE_LANGUAGES as languages %}
<div class="languages">
<p>{% trans "Language" %}:</p>
<ul class="languages">
{% for language in languages %}
<li>
<a href="/{{ language.code }}/"
{% if language.code == CURRENT_LANGUAGE %} class="active"{% endif %}>
{{ language.name_local }}
</a>
</li>
{% endfor %}
</ul>
</div>
url.py
urlpatterns = i18n_patterns(
path('', include('mysite.urls'))
)
упрощенная структура сайта
main.html
--page1.html
--page2.html
Теперь я могу нажать и изменить перевод страницы, но я столкнулся со следующей проблемой. Когда я переключаю язык, например, с main/en/page1, я перенаправляюсь обратно на страницу main/ja, независимо от моего текущего местоположения в структуре сайта. Другими словами, я хотел бы оставаться на той же странице1 при переключении языка и менять только языковой префикс main/en/page1 -> main/ja/page1. Лучшим рабочим примером является DjangoDocs, у которого переключатель языка находится внизу справа и работает идеально.
Решили проблему. Просто добавьте строку {{ request.get_full_path |slice:'4:'}} в <a href=> часть.
{% get_available_languages as AVAILABLE_LANGUAGES %}
{% get_language_info_list for AVAILABLE_LANGUAGES as languages %}
<div class="languages">
<p>{% trans "Language" %}:</p>
<ul class="languages">
{% for language in languages %}
<li>
<a href="/{{ language.code }}/ {{ request.get_full_path |slice:'4:'}}"
{% if language.code == CURRENT_LANGUAGE %} class="active"{% endif %}>
{{ language.name_local }}
</a>
</li>
{% endfor %}
</ul>
</div>