Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django-i18n-怎么可能?_Django - Fatal编程技术网

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。本地电子邮件。。。每个请求只发生一次流,对吗?