diff --git a/utils/templates/utils/_language_switcher_get.html b/utils/templates/utils/_language_switcher_get.html new file mode 100644 index 0000000..ae9f26e --- /dev/null +++ b/utils/templates/utils/_language_switcher_get.html @@ -0,0 +1,29 @@ +{% load i18n translation_tags %} + + {% get_language_info_list for LANGUAGES as languages %} + + {% for language in languages %} + {% if request.LANGUAGE_CODE != language.code %} + {{ language.name_local }} + {% else %} + {{ language.name_local }} + {% endif %} + {% if not forloop.last %}{{ separator|default:"/" }}{% endif %} + {% endfor %} + + + {% comment %} + // Language Switcher + + html { + .selected-language { color: $active_color; } + + &:lang(de) { + a.language-switch[hreflang=en] { @include interactive-underline; } + } + + &:lang(en) { + a.language-switch[hreflang=de] { @include interactive-underline; } + } + } + {% endcomment %} diff --git a/utils/templates/utils/_language_switcher_post.html b/utils/templates/utils/_language_switcher_post.html new file mode 100644 index 0000000..3938ca3 --- /dev/null +++ b/utils/templates/utils/_language_switcher_post.html @@ -0,0 +1,50 @@ +{% load i18n %} + + {% get_language_info_list for LANGUAGES as languages %} + + {% for language in languages %} + {% if request.LANGUAGE_CODE != language.code %} +
+ {% csrf_token %} + + + +
+ {% else %} + {{ language.name_local }} + {% endif %} + {% if not forloop.last %}{{ separator|default:"/" }}{% endif %} + {% endfor %} + + + {% comment %} + // Language Switcher + + form.language-switch { + display: inline; + margin: 0; + padding: 0; + } + + form.language-switch button { + margin: 0; + padding: 0; + border: none; + background: none; + + @include interactive-underline; + } + + html { + .selected-language { color: $active_color; } + + &:lang(de) { + a.language-switch[hreflang=en] { @include interactive-underline; } + } + + &:lang(en) { + a.language-switch[hreflang=de] { @include interactive-underline; } + } + } + + {% endcomment %} diff --git a/utils/templatetags/translation_tags.py b/utils/templatetags/translation_tags.py index 7afc930..02d78d7 100644 --- a/utils/templatetags/translation_tags.py +++ b/utils/templatetags/translation_tags.py @@ -3,7 +3,6 @@ from __future__ import unicode_literals # Erik Stein , 2014-2015 from django import template -from django.db import models from ..translation import get_translation, get_translated_field @@ -22,3 +21,55 @@ def translate(obj, field_name): # Alias translated_field = translate + + +''' +Unfinished: + +from django import template +from django.core.urlresolvers import reverse +from django.core.urlresolvers import resolve +from django.urls.base import translate_url + + +class TranslatedURL(template.Node): + # from http://stackoverflow.com/questions/11437454/django-templates-get-current-url-in-another-language + + def __init__(self, language): + self.language = language + + def render(self, context): + view = resolve(context['request'].path) + request_language = translation.get_language() + translation.activate(self.language) + url = reverse(view.url_name, args=view.args, kwargs=view.kwargs) + translation.activate(request_language) + return url + + +@register.tag(name='translate_url') +def do_translate_url(parser, token): + language = token.split_contents()[1] + return TranslatedURL(language) + + +@register.simple_tag +def translate_url(language, url=None): + """ + {% get_language_info_list for LANGUAGES as languages %} + {% for language in languages %} + {{ language.name_local }} + {% endfor %} + """ + + import ipdb; ipdb.set_trace() + # if not url: + # view = resolve(context['request'].path) + # request_language = translation.get_language() + # translation.activate(self.language) + # url = reverse(view.url_name, args=view.args, kwargs=view.kwargs) + + # view = resolve(context['request'].path) + + return TranslatedURL(language) +''' diff --git a/utils/translation.py b/utils/translation.py index 1b648eb..73f5a0a 100644 --- a/utils/translation.py +++ b/utils/translation.py @@ -8,12 +8,13 @@ from django import http from django.conf import settings from django.core.exceptions import ObjectDoesNotExist, FieldDoesNotExist from django.core.urlresolvers import translate_url +from django.http import HttpResponseRedirect from django.template.loader import select_template from django.utils import translation -from django.views.generic import TemplateView -from django.utils.translation import check_for_language, LANGUAGE_SESSION_KEY from django.utils.http import is_safe_url -from django.http import HttpResponseRedirect +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 @@ -168,9 +169,10 @@ def active_language(lang='de'): translation.deactivate() -def set_language(request): +def set_language_get(request): """ - Modified copy from django.views.i18n + 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()):