Skip to content

Instantly share code, notes, and snippets.

@pgrunewald
Created May 23, 2018 14:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pgrunewald/dcaa9d123dda64dc00873da8d9e35829 to your computer and use it in GitHub Desktop.
Save pgrunewald/dcaa9d123dda64dc00873da8d9e35829 to your computer and use it in GitHub Desktop.
Implementing an own language negotiator
<configure>
<!-- Per request language overriding -->
<adapter
factory=".negotiate_language.NegotiateLanguage"
for="* your.addon.interfaces.IAddonInstalled"
provides="Products.PloneLanguageTool.interfaces.INegotiateLanguage"
/>
</configure>
"""Language Negotiator to allow overriding language per request."""
from Products.PloneLanguageTool.interfaces import INegotiateLanguage
from Products.PloneLanguageTool.LanguageTool import NegotiateLanguage as NegotiateLanguageBase
from zope.interface import implements
class NegotiateLanguage(object):
"""Use default language negotiation, but allow overriding in certain requests."""
implements(INegotiateLanguage)
def __init__(self, site, request):
"""Setup the current language information."""
base_negotiate = NegotiateLanguageBase(site, request)
self.default_language = base_negotiate.default_language
self.language_list = base_negotiate.language_list
# Put here your custom logic to decide which language to use,
# e.g.
forced_language = request.get('force_language')
# -- OR --
# if request.get('force_default_language'):
# forced_language = default_language
# Some sanity check...
if forced_language and forced_language in self.language_list:
self.language = forced_language
else:
self.language = base_negotiate.language
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment