我们公司提供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,具体取决于用户选择的语言。
答案 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设置。