2014-11-17 51 views
0

我被这个问题困住了:django - i18n - 它怎么可能?

我有一个页面deen翻译。在de-页面中,有德语视频。

用例:约翰在德国观看其中一个视频并喜欢它。他说:“我想和我的朋友查理·谁是美国分享这个视频”,他把这个链接,他说:

http://blabla.com/de/das-video/12/ 

我想要的东西,如果查理打开的链接,他应该被重定向到英文版本,此链接:

http://blabla.com/en/the-video/13/ 

我的问题是:

一次查理打开链接,request.LANGUAGE_CODE在他的身边将成为de因为国际化的set_language

我该如何将他重定向到此视频的英文版本?

回答

2

Django i18n以这种方式构建,如果url包含语言前缀,那么该语言就会显示出来。

但是,如果您要从网址中删除语言前缀,则django会首先发现用户的首选语言,然后显示相应的页面版本。

因此,在你的情况下,我认为最好的办法是创建一个分享按钮或可能显示页面上的共享网址。用户必须复制此网址,而不是浏览器地址栏中的网址。 该URL必须是没有语言的前缀:

http://blabla.com/das-video/12/ 

修订

如果您仍然希望更改默认的Django国际化的逻辑,那么你需要继承

django.middleware.locale.LocaleMiddleware 

然后修改一些其方法(process_request,process_response)并使用此修改的中间件代替LocaleMiddleware

+0

你点了重要的一点,谢谢..分享只是一个例子。所以在英文浏览器中打开'/ de/..''会显示''de''版本,不管是什么语言环境,对吧? – doniyor

+0

@ doniyor是的,正好是 – stalk

+0

但我可以编写一个中间件,删除语言前缀并将请求交给localemiddleware,对吗? – doniyor