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 %} -
+ {% csrf_token %} - -
- {% endfor %} -
- {% csrf_token %} - +
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()