0

我正在使用Django並開發一個提供多種語言的i18n站點。我想創建一個停留在base.html中的模式,以便用戶可以在任何地方切換語言。django i18n - 獲取不同語言的當前路徑

我設法做這樣的事情。

<div class="modal-body"> 
{% get_available_languages as languages %} 
    {% for lang_code, lang_name in languages %} 
     {% language lang_code %} 
     <a href="{% url 'home' %}" class="btn lang-btn {% ifequal request.LANGUAGE_CODE lang_code %}selected{% endifequal %}">{{lang_code|lang_name}}</a> 
     {% endlanguage %} 
    {% endfor %} 
</div> 

果然像URL:,/en//fr/等。 但這種做法的鏈接只有主網頁。

當使用{{request.path}}{{request.get_full_path}}像的網址:

<a href="{{ request.path }}" class="btn lang-btn {% ifequal request.LANGUAGE_CODE lang_code %}selected{% endifequal %}">{{lang_code|lang_name}}</a> 

它不包括國際化的URL模式..

有沒有辦法指導當前的URL與Request的?

TARGET

/foo//ja/foo/​​/fr/foo/

/bar/:提前/ja/bar//en/bar//fr/bar/

謝謝!

回答

0

本主題在此SO問題中討論:Django templates: Get current URL in another language

在我的項目中,我使用這個簡單的模板標籤(取自https://djangosnippets.org/snippets/2875/),它以另一種語言返回當前視圖的URL。

foo/templatetags/i18n_urls.py

from django import template 

from django.core.urlresolvers import translate_url 

register = template.Library() 


@register.simple_tag(takes_context=True) 
def change_lang(context, lang: str, *args, **kwargs): 
    path = context['request'].path 

    return translate_url(path, lang) 

some_template.html

{% load i18n_urls %} 

<ul> 
    <li> 
     <a href="{% change_lang 'en' %}">EN</a> 
    </li> 
    <li> 
     <a href="{% change_lang 'cs' %}">CS</a> 
    </li> 
    <li> 
     <a href="{% change_lang 'de' %}">DE</a> 
    </li> 
</ul> 

請注意:translate_url功能沒有在官方的Django文檔記錄。這裏是這個函數的源代碼:https://github.com/django/django/blob/master/django/urls/base.py#L161-L181

+0

我用你的代碼,並最終做到了。當我將「{%language%}」模板標記根植並只調整了代碼段時,它工作正常。謝謝! –