检查Django中是否存在另一种语言的当前URL模式

时间:2017-07-29 08:39:02

标签: django internationalization url-pattern

我正在尝试在Django中开始我的新网站,其中包含很多设置,这些设置将会越来越难以实施。其中一个是网站国际化,也是网址模式国际化。

我想要实现的是拥有这样的网址:

www.example.com/news                 [en] [news]
www.example.com/en/news              [en] [news]
www.example.com/no/nyheter           [no] [news]
www.example.com/en/top-articles      [en] [top articles]

在我访问的每个页面上,我希望网站导航有一个下拉菜单,其中包含网站语言,以及当前选择的语言。与此类似:

<ul class="dropdown">
    <li><a href="/en/news" hreflang="en" class="active">English</a></li>
    <li><a href="/no/nyheter" hreflang="no" rel="alternate">Norsk</a></li>
</ul>

现在至于更改为其他语言,有没有办法看到如果当前页面存在用户可以选择的语言?

如果选择的语言中的当前页面不存在,我希望用户返回到所选语言的首页。所以下拉列表看起来像这样:

<ul class="dropdown">
    <li><a href="/en/top-articles" hreflang="en" class="active">English</a></li>
    <li><a href="/no" hreflang="no">Norsk</a></li>
</ul>

1 个答案:

答案 0 :(得分:1)

我认为您这样做的一种方法是根据用户选择在用户会话中设置django_language

Django将处理任何文本的翻译  使用gettext_lazy指定的。您的网址将使用Django url.reverse函数以及django_language和其他参数生成。

确定用户可以选择的语言中是否存在当前页面将归结为您的实现。

例如,内容模型将有一个语言字段,可以轻松查询语言匹配django_language的记录。如果没有匹配,则可以对语言首页进行重定向,假设它始终存在。

参考文献:

http://django-book.readthedocs.io/en/latest/chapter19.html