【发布时间】:2013-11-20 12:58:03
【问题描述】:
我正在用 Django 编写一个简单的多语言网站,但我在切换语言方面有点挣扎。我认为为每种语言设置不同的 url 会很好(例如 /en/contact/ 用于英语站点,/de/kontakt/ 用于德语站点)。也许这不仅看起来更好,而且在 SEO 环境中也有意义。
所以我在 urls.py 中有:
urlpatterns = pattern(‘’,
url(r’^de/kontakt/$’, mysite.views.DeKontaktView, name=‘kontakt’,),
url(r’^en/contact/$’, mysite.views.EnContactView, name=‘contact’,),
)
现在我想在每个页面(在基本模板中)都有链接,以便在德语和英语之间切换语言。在 Django 文档中,我找到了“set_language 重定向视图”(https://docs.djangoproject.com/en/1.6/topics/i18n/translation/#the-set-language-redirect-view)。
我的问题是在切换语言时,它应该在哪里以及如何告诉视图它应该重定向到哪里。我并不总是想重定向到我网站的首页,而是重定向到另一种语言的相应页面 - 它具有完全不同的 url - 不仅是 url 中的不同语言前缀。
由于“set_language 重定向视图”似乎使用引用者,除非帖子数据中有下一个参数,所以我的第一个想法是这样的:
views.py:
def EnContactView(request):
…
if request.LANGUAGE_CODE == ‘en’:
return render_to_response(‘en/contact.html’), context)
else:
return redirect(‘/de/kontakt/‘)
def DeKontaktView(request):
…
if request.LANGUAGE_CODE == ‘de’:
return render_to_response(‘de/kontakt.html’), context)
else:
return redirect(‘/en/contact/‘)
但我认为这可能不是一个好的解决方案,因为这也会根据浏览器语言进行重定向。例如:如果浏览器语言为“en”的人直接访问我们的德语网址之一,例如通过谷歌。由于会话中既没有 cookie “en”也没有语言选择,因此访问者将被重定向到英文 url——这不是有意的。
那么,针对这些情况的最佳做法是什么?总结一下:我有完全不同的语言网址——不仅仅是网址中的不同语言前缀。对于每种语言,我都有一个模板(目录 templates/en/ 和 templates/de/)。
- 如何在不同语言的对应页面之间切换?
- 顺便问一下:是否可以不使用表单作为语言切换器,而是使用简单的链接“de”和“en”?
如果有人可以帮助我,那就太好了。对于 django 菜鸟来说,“语言的东西”是相当令人困惑的。
【问题讨论】:
-
为什么不使用“国际化:在 URL 模式中”:docs.djangoproject.com/en/dev/topics/i18n/translation/…?