Internationalization and cache¶
Description
Using Plone translation facilities in the presence of caching.
Introduction¶
You need to have the following monkey-patch in place if you intend to use LinguaPlone (translated content) with front-end caching servers. Otherwise CSS, JS and media files will have a language cookie set on them, preventing cache from working.
Note
This is a well-known Plone issue.
Example:
from ZPublisher.HTTPRequest import HTTPRequest
LanguageTool._old___call__ = LanguageTool.__call__
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']
LanguageTool.__call__ = LanguageTool__call__
More info