diff --git a/shared/utils/templates/utils/_language_switcher_get.html b/shared/utils/templates/utils/_language_switcher_get.html index 2912e89..a1dd560 100644 --- a/shared/utils/templates/utils/_language_switcher_get.html +++ b/shared/utils/templates/utils/_language_switcher_get.html @@ -1,4 +1,4 @@ -{% load i18n translations %} +{% load i18n %} {% get_language_info_list for LANGUAGES as languages %} diff --git a/shared/utils/translation.py b/shared/utils/translation.py index f111e8d..25c38cf 100644 --- a/shared/utils/translation.py +++ b/shared/utils/translation.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -# Erik Stein , 2015 +from copy import copy import os from collections import OrderedDict from contextlib import contextmanager @@ -16,7 +16,7 @@ from django.utils.http import is_safe_url from django.utils.six.moves.urllib.parse import urlsplit, urlunsplit from django.utils.translation import check_for_language, LANGUAGE_SESSION_KEY from django.views.generic import TemplateView -from django.views.i18n import LANGUAGE_QUERY_PARAMETER +from django.views.i18n import LANGUAGE_QUERY_PARAMETER, set_language FALLBACK_LANGUAGE_CODE = getattr(settings, 'FALLBACK_LANGUAGE_CODE', 'en') @@ -166,26 +166,28 @@ def active_language(lang='de'): def set_language_get(request): """ set_language per GET request, - modified copy from django.views.i18n (django 1.9.x) """ - next = request.POST.get('next', request.GET.get('next')) - if not is_safe_url(url=next, host=request.get_host()): - next = request.META.get('HTTP_REFERER') - if not is_safe_url(url=next, host=request.get_host()): - next = '/' - response = http.HttpResponseRedirect(next) - if request.method == 'GET': - lang_code = request.GET.get(LANGUAGE_QUERY_PARAMETER, None) - if lang_code and check_for_language(lang_code): - next_trans = translate_url(next, lang_code) - if next_trans != next: - response = http.HttpResponseRedirect(next_trans) - - if hasattr(request, 'session'): - request.session[LANGUAGE_SESSION_KEY] = lang_code - else: - response.set_cookie(settings.LANGUAGE_COOKIE_NAME, lang_code, - max_age=settings.LANGUAGE_COOKIE_AGE, - path=settings.LANGUAGE_COOKIE_PATH, - domain=settings.LANGUAGE_COOKIE_DOMAIN) - return response + request = copy(request) + request.POST = request.GET + request.method = 'POST' + return set_language(request) + + +class I18nUrlMixin(object): + """ + View Mixin. + Makes the url pattern name available in the template context. + + Usage: + class ViewClass(I18nUrlMixin, TemplateView): + ... + + url(r'', ViewClass.as_view(view_name='my-wonderful-view', name='my-wonderful-view'), + """ + view_name = None + + def get_context_data(self, **kwargs): + if 'view_name' not in kwargs and self.view_name: + kwargs['view_name'] = self.view_name + context = super().get_context_data(**kwargs) + return context