Simplify language chooser (#328)

* Simplify language chooser

- Allows usage of i18n_patterns with prefix_default_language=False
- Change templatetag from simple tag to an inclusion tag
- Reduces complexity by relying on Django's behavior in the
  set_language view: it will translate any url passed as 'next'.
  This behavior has been present since Django 1.9.
- Remove individual forms for each language

Fixes #327

Reference: https://github.com/django/django/commit/aa5ab114e34645823b219f9a866fd82fc26b427b

* Add check to ensure LocaleMiddleware

* Remove check in favor of silent warning

* Fix template tag tests
This commit is contained in:
Julian Wachholz
2023-12-05 12:18:44 +01:00
committed by GitHub
parent 43dca1ae93
commit b393c11ecb
5 changed files with 71 additions and 123 deletions
@@ -1,18 +1,15 @@
{% load admin_interface_tags %}
{% if languages %}
{% if set_language_url %}
<div class="language-chooser {% if theme.language_chooser_control == 'minimal-select' %}minimal {% endif %}">
{% for language in languages %}
<form class="language-chooser-hidden-form" id="language-chooser-hidden-form-{{ language.code }}" action="{{ language.activation_url }}" method="POST">
<form class="language-chooser-select-form" action="{{ set_language_url }}" method="POST">
{% csrf_token %}
<input name="language" type="hidden" value="{{ language.code }}">
</form>
{% endfor %}
<form class="language-chooser-select-form">
{% csrf_token %}
<select name="language" onchange="document.getElementById(String('language-chooser-hidden-form-' + this.value)).submit();">
{% for language in languages %}
<option value="{{ language.code }}" {% if language.active %}selected{% endif %}>{% if theme.language_chooser_display == 'code' %}{{ language.code|upper }}{% elif theme.language_chooser_display == 'name' %}{{ language.name }}{% endif %}</option>
<input type="hidden" name="next" value="{{ next }}">
<select name="language" onchange="this.form.submit();">
{% for code, language in LANGUAGES %}
<option value="{{ code }}" {% if code == LANGUAGE_CODE %}selected{% endif %}>
{% if theme.language_chooser_display == 'code' %}{{ code|upper }}{% elif theme.language_chooser_display == 'name' %}{{ language }}{% endif %}
</option>
{% endfor %}
</select>
</form>