django i18n - 获取不同语言的当前路径

Posted

技术标签:

【中文标题】django i18n - 获取不同语言的当前路径【英文标题】:django i18n - get current path for different language 【发布时间】:2017-10-25 18:14:15 【问题描述】:

我正在使用 Django 并开发一个提供多种语言的 i18n 站点。我想制作一个保留在 base.html 中的模式,以便用户可以在任何地方切换语言。

我设法做到了这样的事情。

<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>

结果是:/ja//en//fr/ 等网址。 但这种方法只链接到主页。

当使用request.pathrequest.get_full_path 作为网址时:

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

它不包括 i18n url 模式..

有什么方法可以用 request.path 引导当前 url 吗??

目标

当在/foo/ : /ja/foo/ /en/foo/ /fr/foo/

当在/bar/ : /ja/bar/ /en/bar/ /fr/bar/

提前致谢!

【问题讨论】:

【参考方案1】:

在这个 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.urls 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。

【讨论】:

我使用了你的代码,终于成功了。当我根除% language % 模板标签并仅调整您的 sn-p 时,它起作用了。谢谢!

以上是关于django i18n - 获取不同语言的当前路径的主要内容,如果未能解决你的问题,请参考以下文章

django - 如何使翻译工作?

Django i18n:如何不翻译管理站点?

如何获取执行程序的当前路径

i18n如何获取有关该语言的cookie信息

生产中的 Django i18n

Django 模板:获取另一种语言的当前 URL