Django:LocaleMiddleware检查哪个url?

时间:2018-02-15 14:12:53

标签: django django-templates django-middleware

我们公司提供API和少量通过Iframe嵌入客户网站的小部件。

现在我们有一位比利时客户希望使用我们的小部件。如您所知,比利时是双语的,因此我们自由地使用LocaleMiddleware{% trans 'string' %}标签。

正如我所理解的,中间件检查URL以查看要使用的语言。当您第一次访问我们的客户网站时,您会看到一个大弹出窗口,您可以选择语言。在此弹出窗口之后,您的网址将更改为以下格式:www.clientorg.be/fr_BE/rest-of-the-url,以便(希望)可以正常工作。

但是,我们的小部件通过iframe提供。 (src = s2.oururl.com),不包含语言值。

所以我的问题是:Django能否检测到用户的语言?或者它只能检查'我们's2.url,这意味着我们需要联系我们的客户并提供2个网址以粘贴iframe,具体取决于用户选择的语言。

1 个答案:

答案 0 :(得分:1)

这正是LocalMiddleware尝试确定语言的原因: https://docs.djangoproject.com/en/2.0/topics/i18n/translation/

  

LocaleMiddleware尝试通过以下方式确定用户的语言首选项   遵循此算法:

     

首先,它在请求的URL中查找语言前缀。这是   仅在您使用i18n_patterns功能时执行   root URLconf。有关详细信息,请参阅国际化:URL模式   有关语言前缀以及如何国际化URL的信息   图案。

     

如果失败,它会查找当前的LANGUAGE_SESSION_KEY键   用户会话。

     

如果没有,它会找到一个cookie。

     

使用的Cookie名称由LANGUAGE_COOKIE_NAME设置   设置。 (默认名称为django_language。)

     

如果失败,它会查看Accept-Language HTTP标头。这个标题   由您的浏览器发送并告诉服务器您使用哪种语言   更喜欢,按优先顺序排列。 Django尝试标题中的每种语言   直到它找到一个可用的翻译。

     

如果失败,则使用全局LANGUAGE_CODE设置。