如何通过Django URL更改语言?
我想在用户在网址中输入地区语言时,改变网站的语言,比如像这样 http://example.com/es/, http://example.com/es/article-name, http://example.com/en/。
我该怎么做呢?
3 个回答
3
现在最好的方法是使用网址模式中的内置语言前缀:
https://docs.djangoproject.com/en/1.8/topics/i18n/translation/#language-prefix-in-url-patterns
3
有几种方法可以做到这一点。最符合标准的方法是使用HTTP的 Accept-Language
头,这个头可以通过 request.META['HTTP_ACCEPT_LANGUAGE']
来获取,帮助我们判断用户希望用什么语言来接收内容。然后,我们就可以返回一个用用户选择的语言翻译过的 HttpResponse
。
另一种常见的方法,更符合你描述的情况,是在用户第一次访问时询问他们选择一种语言,并把这个选择存储在会话中。一旦用户做出选择,就可以把浏览器重定向到相应语言的子目录,并在视图中使用相对链接,这样就不需要担心语言之间的切换了。你可以调整你的URL配置,以便将语言关键字传递给你的视图,像这样:
urlpatterns = patterns('',
(r'^(?P<lang>[a-zA-Z]{2})/ ...
在Django的文档网站上有一个关于国际化/本地化的 国际化/本地化 页面,可能会帮助你入门。
8
可以看看 django-locale-url。
这个工具提供了一种中间件,正好能满足你的需求,所以你不需要在urls.py里去检查语言了。