Dan*_*gen 28 django django-templates internationalization
我正在使用i18n_patternsDjango应用程序创建语言前缀.
我的网址如下所示:
/de/contact/
/fr/contact/
/it/contact/
Run Code Online (Sandbox Code Playgroud)
在我的基本模板中,我循环遍历所有可用语言以显示语言切换链接.
{% get_available_languages as languages %}
<nav id="language_chooser">
<ul>
{% for lang_code, lang_name in languages %}
{% language lang_code %}
<li><a href="{% url 'home' %}" alt="{{ lang_name }}" title="{{ lang_name }}">{{ lang_code }}</a></li
{% endlanguage %}
{% endfor %}
</ul>
</nav>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我正在撤消"主页"URL.有没有办法获得当前页面的翻译URL?
如果我在我的"联系"页面的德语版本上,我希望"fr"链接指向"联系"页面的法语版本,而不是"主页"页面.
Phi*_*ler 16
我没有使用语言前缀,而是翻译了网址.但是,此模板标记还应该可以帮助您:
# 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)
Run Code Online (Sandbox Code Playgroud)
它以所需语言返回当前URL.像这样使用它:{% translate_url de %}
欢迎提出改进意见和建议.
这段代码应该这样做:
https://djangosnippets.org/snippets/2875/
一旦你补充说,作为一个自定义的模板标签,那么你可以这样做:
<a href='{% change_lang 'fr' %}'>View this page in French</a>
一个简单的解决方案是使用Django 的translate_url函数和模板标签:
# utils/templatetags/utils.py
from django.template import Library
from django.urls import translate_url as django_translate_url
register = Library()
@register.simple_tag(takes_context=True)
def translate_url(context, lang_code):
path = context.get('request').get_full_path()
return django_translate_url(path, lang_code)
Run Code Online (Sandbox Code Playgroud)
然后在你的 html 中使用它来选择语言:
{% load i18n utils %}
{% get_available_languages as languages %}
<ul>
{% for lang_code, lang_name in languages %}
<li><a href="{% translate_url lang_code %}">{{ lang_code }}</a></li>
{% endfor %}
</ul>
Run Code Online (Sandbox Code Playgroud)
对于 hreflang :
{% get_available_languages as languages %}
{% for lang_code, lang_name in languages %}
<link rel="alternate" hreflang="{{lang_code}}" href="{% translate_url lang_code %}" />
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
我认为值得一提的是有一个名为的内置函数translate_url。
from django.urls import translate_url
translate_url(url, lang_code)
Run Code Online (Sandbox Code Playgroud)