如何通过Django URL更改语言?

13 投票
3 回答
9913 浏览
提问于 2025-04-15 23:46

我想在用户在网址中输入地区语言时,改变网站的语言,比如像这样 http://example.com/es/http://example.com/es/article-namehttp://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里去检查语言了。

撰写回答