diff --git a/admin_interface/templates/admin/base_site.html b/admin_interface/templates/admin/base_site.html
index 76129a82..1efe5f76 100644
--- a/admin_interface/templates/admin/base_site.html
+++ b/admin_interface/templates/admin/base_site.html
@@ -186,7 +186,6 @@
{{ block.super }}
{% get_admin_interface_theme as theme %}
{% if theme.language_chooser_active %}
- {% get_admin_interface_languages as languages %}
- {% include "admin_interface/language_chooser.html" %}
+ {% admin_interface_language_chooser %}
{% endif %}
{% endblock %}
diff --git a/admin_interface/templates/admin_interface/language_chooser.html b/admin_interface/templates/admin_interface/language_chooser.html
index 1b69cfe7..b954c7fc 100644
--- a/admin_interface/templates/admin_interface/language_chooser.html
+++ b/admin_interface/templates/admin_interface/language_chooser.html
@@ -1,18 +1,15 @@
{% load admin_interface_tags %}
-{% if languages %}
+{% if set_language_url %}
- {% for language in languages %}
-
- {% endfor %}
-
diff --git a/admin_interface/templatetags/admin_interface_tags.py b/admin_interface/templatetags/admin_interface_tags.py
index 1eceb36a..6e70f76d 100644
--- a/admin_interface/templatetags/admin_interface_tags.py
+++ b/admin_interface/templatetags/admin_interface_tags.py
@@ -16,8 +16,8 @@
register = template.Library()
-@register.simple_tag(takes_context=True)
-def get_admin_interface_languages(context):
+@register.inclusion_tag("admin_interface/language_chooser.html", takes_context=True)
+def admin_interface_language_chooser(context):
if not settings.USE_I18N:
# i18n disabled
return None
@@ -25,7 +25,7 @@ def get_admin_interface_languages(context):
# less than 2 languages
return None
try:
- set_language_url = reverse("set_language")
+ context["set_language_url"] = reverse("set_language")
except NoReverseMatch:
# ImproperlyConfigured - must include i18n urls:
# urlpatterns += [url(r'^i18n/', include('django.conf.urls.i18n')),]
@@ -33,28 +33,16 @@ def get_admin_interface_languages(context):
request = context.get("request", None)
if not request:
return None
+ context["LANGUAGES"] = settings.LANGUAGES
+
full_path = request.get_full_path()
admin_nolang_url = re.sub(r"^\/([\w]{2})([\-\_]{1}[\w]{2,4})?\/", "/", full_path)
- if admin_nolang_url == full_path:
- # ImproperlyConfigured - must include admin urls using i18n_patterns:
- # from django.conf.urls.i18n import i18n_patterns
- # urlpatterns += i18n_patterns(url(r'^admin/', admin.site.urls))
- return None
- langs_data = []
+
default_lang_code = settings.LANGUAGE_CODE
current_lang_code = translation.get_language() or default_lang_code
- for language in settings.LANGUAGES:
- lang_code = language[0].lower()
- lang_name = language[1].title()
- lang_data = {
- "code": lang_code,
- "name": lang_name,
- "default": lang_code == default_lang_code,
- "active": lang_code == current_lang_code,
- "activation_url": f"{set_language_url}?next=/{lang_code}{admin_nolang_url}",
- }
- langs_data.append(lang_data)
- return langs_data
+ context["LANGUAGE_CODE"] = current_lang_code
+ context["next"] = admin_nolang_url
+ return context
@register.simple_tag()
diff --git a/tests/test_templatetags.py b/tests/test_templatetags.py
index 8de4b88b..36635a76 100644
--- a/tests/test_templatetags.py
+++ b/tests/test_templatetags.py
@@ -22,118 +22,60 @@ def tearDown(self):
def __render_template(self, string, context=None):
return Template(string).render(Context(context or {}))
- def test_get_admin_interface_languages(self):
+ def test_admin_interface_language_chooser(self):
context = Context({"request": self.request_factory.get("/en/admin/")})
- languages = templatetags.get_admin_interface_languages(context)
+ context = templatetags.admin_interface_language_chooser(context)
+ languages = context["LANGUAGES"]
expected_languages = [
- {
- "code": "de",
- "name": "Deutsch",
- "default": False,
- "active": False,
- "activation_url": "/i18n/setlang/?next=/de/admin/",
- },
- {
- "code": "en",
- "name": "English",
- "default": True,
- "active": True,
- "activation_url": "/i18n/setlang/?next=/en/admin/",
- },
- {
- "code": "es",
- "name": "Español",
- "default": False,
- "active": False,
- "activation_url": "/i18n/setlang/?next=/es/admin/",
- },
- {
- "code": "fa",
- "name": "Farsi",
- "default": False,
- "active": False,
- "activation_url": "/i18n/setlang/?next=/fa/admin/",
- },
- {
- "code": "fr",
- "name": "Français",
- "default": False,
- "active": False,
- "activation_url": "/i18n/setlang/?next=/fr/admin/",
- },
- {
- "code": "it",
- "name": "Italiano",
- "default": False,
- "active": False,
- "activation_url": "/i18n/setlang/?next=/it/admin/",
- },
- {
- "code": "pl",
- "name": "Polski",
- "default": False,
- "active": False,
- "activation_url": "/i18n/setlang/?next=/pl/admin/",
- },
- {
- "code": "pt-BR",
- "name": "Português",
- "default": False,
- "active": False,
- "activation_url": "/i18n/setlang/?next=/pt-br/admin/",
- },
- {
- "code": "ru",
- "name": "Русский",
- "default": False,
- "active": False,
- "activation_url": "/i18n/setlang/?next=/ru/admin/",
- },
- {
- "code": "tr",
- "name": "Türk",
- "default": False,
- "active": False,
- "activation_url": "/i18n/setlang/?next=/tr/admin/",
- },
+ ("de", "Deutsch"),
+ ("en", "English"),
+ ("es", "Español"),
+ ("fa", "Farsi"),
+ ("fr", "Français"),
+ ("it", "Italiano"),
+ ("pl", "Polski"),
+ ("pt-BR", "Português"),
+ ("ru", "Русский"),
+ ("tr", "Türk"),
]
self.assertEqual(len(languages), len(expected_languages))
self.assertEqual(languages[0], expected_languages[0])
self.assertEqual(languages[1], expected_languages[1])
+ self.assertEqual(context["next"], "/admin/")
@override_settings(
USE_I18N=False,
)
- def test_get_admin_interface_languages_with_i18n_disabled(self):
+ def test_admin_interface_language_chooser_with_i18n_disabled(self):
context = Context({"request": self.request_factory.get("/en/admin/")})
- languages = templatetags.get_admin_interface_languages(context)
- self.assertEqual(languages, None)
+ tag_context = templatetags.admin_interface_language_chooser(context)
+ self.assertEqual(tag_context, None)
@override_settings(
ROOT_URLCONF="tests.urls_without_i18n_patterns",
)
- def test_get_admin_interface_languages_without_i18n_url_patterns(self):
+ def test_admin_interface_language_chooser_without_i18n_url_patterns(self):
context = Context({"request": self.request_factory.get("/en/admin/")})
- languages = templatetags.get_admin_interface_languages(context)
- self.assertEqual(languages, None)
+ tag_context = templatetags.admin_interface_language_chooser(context)
+ self.assertEqual(tag_context, None)
@override_settings(
LANGUAGES=(("en", "English"),),
)
- def test_get_admin_interface_languages_without_multiple_languages(self):
+ def test_admin_interface_language_chooser_without_multiple_languages(self):
context = Context({"request": self.request_factory.get("/en/admin/")})
- languages = templatetags.get_admin_interface_languages(context)
- self.assertEqual(languages, None)
+ tag_context = templatetags.admin_interface_language_chooser(context)
+ self.assertEqual(tag_context, None)
- def test_get_admin_interface_languages_without_request(self):
+ def test_admin_interface_language_chooser_without_request(self):
context = Context({})
- languages = templatetags.get_admin_interface_languages(context)
- self.assertEqual(languages, None)
+ tag_context = templatetags.admin_interface_language_chooser(context)
+ self.assertEqual(tag_context, None)
- def test_get_admin_interface_languages_without_language_prefix_in_url(self):
+ def test_admin_interface_language_chooser_without_language_prefix_in_url(self):
context = Context({"request": self.request_factory.get("/admin/")})
- languages = templatetags.get_admin_interface_languages(context)
- self.assertEqual(languages, None)
+ tag_context = templatetags.admin_interface_language_chooser(context)
+ self.assertEqual(tag_context["next"], "/admin/")
def test_get_theme(self):
Theme.objects.all().delete()