django-i18n-怎么可能?
我被这个问题困住了: 我有一个带有django-i18n-怎么可能?,django,Django,我被这个问题困住了: 我有一个带有de和en翻译的页面。在de-页面中,有德语视频 用例:John用德语观看其中一个视频并喜欢它。他说:“我想和我在美国的朋友查理分享这段视频”,他将这个链接发送给他: http://blabla.com/de/das-video/12/ 我想要的是,如果Charlie打开链接,他应该被重定向到英文版本,这个链接: http://blabla.com/en/the-video/13/ 我的问题是: 一旦charlie打开链接,request.LANGUAGE\
de
和en
翻译的页面。在de
-页面中,有德语视频
用例:John用德语观看其中一个视频并喜欢它。他说:“我想和我在美国的朋友查理分享这段视频”,他将这个链接发送给他:
http://blabla.com/de/das-video/12/
我想要的是,如果Charlie打开链接,他应该被重定向到英文版本,这个链接:
http://blabla.com/en/the-video/13/
我的问题是:
一旦charlie打开链接,request.LANGUAGE\u code
在他身边就会因为i18n的原因变成de
我如何将他重定向到这段视频的英文版?Django i18n的构建方式是,如果url包含一个语言前缀,那么将显示该语言 但是,如果要从url中删除语言前缀,django将首先发现用户的首选语言,然后显示页面的相应版本 所以,在您的情况下,我认为最好的方法是创建一个共享按钮,或者在页面上显示用于共享的url。用户必须复制此url,而不是浏览器地址栏中的url。 该url必须没有语言前缀:
http://blabla.com/das-video/12/
已更新
如果您仍然想要更改默认的django i18n逻辑,那么您需要子类化
django.middleware.locale.LocaleMiddleware
然后修改它的一些方法(
process\u request
,process\u response
),并使用这个修改后的中间件,而不是localemidware
您说到了重点,谢谢。。分享只是一个例子。因此,在英文浏览器中打开/de/。
将显示de
版本,无论是哪种语言环境,对吗?@doniyor是的,没错,但我可以编写一个中间件,删除语言前缀并将请求交给localemidware,对吗?在这种情况下,您可以无休止地重定向:您访问/de/。
,然后你被重定向到/…
,然后你被重定向到/de/。
等等为什么,我的意思是,请求只通过所有中间件一次,对吗?喜欢1.我的朋友2。本地电子邮件。。。每个请求只发生一次流,对吗?