1 from django.conf import settings
4 from django.urls import resolve, reverse, Resolver404
6 from django.core.urlresolvers import resolve, reverse, Resolver404
8 from django import template
9 from django.utils import translation
10 from ..utils.views import get_current_object
12 register = template.Library()
15 @register.inclusion_tag('fnpdjango/lang_switcher.html', takes_context=True)
16 def lang_switcher(context):
17 """Context-aware language switcher.
19 Use ..utils.views.set_current_object to provide the context.
21 request = context['request']
22 obj = get_current_object(request)
23 languages = settings.LANGUAGES
24 if hasattr(obj, 'get_available_languages'):
25 available_languages = set(obj.get_available_languages())
26 languages = [lang for lang in languages if lang[0] in available_languages]
29 'languages': languages,
34 def get_here_url(request, lang):
35 obj = get_current_object(request, for_url=True)
36 if hasattr(obj, 'get_absolute_url'):
37 with translation.override(lang):
38 url = obj.get_absolute_url()
41 match = resolve(request.get_full_path())
48 lang = translation.get_language()
49 with translation.override(lang):
50 url = reverse(view, args=match.args, kwargs=match.kwargs)