Cookie устанавливается LanguageTool и устанавливается только тогда, когда его еще нет в запросе, или отличается от того, что было установлено в запросе.
Обычно LanguageTool смотрит только на этот самый cookie длярешить, какой язык использовать.При обычном использовании Plone вы никогда не увидите этот заголовок Set-Cookie на ресурсах CSS и JS.Однако LinguaPlone настраивает LanguageTool для просмотра гораздо большей информации, включая URL-адрес, к которому вы пытались обратиться, для определения языка, используемого для ответа.
При установленном LinguaPlone LanguageTool определяетправильный язык для каждого ресурса, к которому обращаются, так как это единственный способ обеспечить согласованную поддержку языка интерфейса пользователя.
Файл cookie обычно уже устанавливается при загрузке главной страницы (которая впоследствии загружает JS и CSS снабор печенья).Таким образом, в обычном сценарии ваши CSS и JS отлично кешируются.Вы видите только заголовок Set-Cookie, потому что в запросе нет соответствующего заголовка Cookie: I18N_LANGUAGE="en"
.
Если вам нужно управлять этим для ваших конкретных случаев использования, вы можете установить monkeypatch Products.PloneLanguageTool.LanguageTool.LanguageTool.__call__
, чтохук before-publishing-traverse, который будет запускать определение языка при каждом запросе.Я бы порекомендовал для этого использовать коллективный. Monkeypatcher.Вот что я сделал в недавнем проекте, где сайт был перенесен со смешанным набором языков по всему дереву (что-то, что мы должны распутать в будущем):
configure.zcml:
<?xml version="1.0"?>
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:monkey="http://namespaces.plone.org/monkey"
>
<!-- other directives -->
<include package="collective.monkeypatcher" />
<monkey:patch
description="Patch LanguageTool before traverse hook to prevent setting
the language cookie"
class="Products.PloneLanguageTool.LanguageTool.LanguageTool"
original="__call__"
replacement=".patches.LanguageTool__call__"
preserveOriginal="true"
/>
</configure>
и в модуле patches.py:
from ZPublisher.HTTPRequest import HTTPRequest
def LanguageTool__call__(self, container, req):
"""The __before_publishing_traverse__ hook.
Patched to *not* set the language cookie, as this breaks the site model.
"""
self._old___call__(container, req)
if not isinstance(req, HTTPRequest):
return None
response = req.response
if 'I18N_LANGUAGE' in response.cookies:
if 'set_language' in req.form:
return None
del response.cookies['I18N_LANGUAGE']
Обратите внимание, что исправление удаляет cookie после факта, если только set_language
не использовалось в текущем запросе.
Нет изменений в этом поведении для Plone 4.x.