0

私はDjangoを使用していて、多言語に対応したi18nサイトを開発しています。私はbase.htmlにあるモーダルを作りたいので、どこにいても言語を切り替えることができます。django i18n - 異なる言語の現在のパスを取得する

私はこのようなことをしました。 、/en//fr/など。 だけメインページへのアプローチリンクのこの種:のようなURLが判明

<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のために{{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パターンが含まれていません。..

request.pathで現在のURLを指示する方法はあります?

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%}}テンプレートタグを根拠にしてスニペットを調整したときに機能しました。ありがとう! –