Browse Source

Language switcher templates.

backports/m1-live
Erik Stein 9 years ago
parent
commit
e726a80628
  1. 29
      utils/templates/utils/_language_switcher_get.html
  2. 50
      utils/templates/utils/_language_switcher_post.html
  3. 53
      utils/templatetags/translation_tags.py
  4. 12
      utils/translation.py

29
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 %}
<a class="language-switch" rel="alternate" hreflang="de" href="{% url 'set_language' %}?language={{ language.code }}">{{ language.name_local }}</a>
{% else %}
<span class="selected-language">{{ language.name_local }}</span>
{% 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 %}

50
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 %}
<form class="language-switch" action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}">
<input name="language" type="hidden" value="{{ language.code }}">
<button type="submit">{{ language.name_local }}</button>
</form>
{% else %}
<span class="selected-language">{{ language.name_local }}</span>
{% 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 %}

53
utils/templatetags/translation_tags.py

@ -3,7 +3,6 @@ from __future__ import unicode_literals
# Erik Stein <code@classlibrary.net>, 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 %}
<a href="{% translate_url language.code %}">{{ language.name_local }}</a>
{% 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)
'''

12
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()):

Loading…
Cancel
Save