I’m not using language prefixes, but translated urls instead. However, this template tag should also help you:
# This Python file uses the following encoding: utf-8
from django import template
from django.core.urlresolvers import reverse # from django.urls for Django >= 2.0
from django.core.urlresolvers import resolve # from django.urls for Django >= 2.0
from django.utils import translation
register = template.Library()
class TranslatedURL(template.Node):
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)
It returns the current url in the desired language. Use it like this: {% translate_url de %}
Comments and suggestions for improvements are welcome.