Source code for pyams_i18n.interfaces

#
# Copyright (c) 2008-2015 Thierry Florac <tflorac AT ulthar.net>
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#

__docformat__ = 'restructuredtext'

from zope.interface import Interface, Invalid, invariant
from zope.schema import Bool, Choice, List, Set

from pyams_i18n import _


LANGUAGE_POLICIES = ('server',
                     'session',
                     'browser',
                     'browser --> session --> server',
                     'browser --> server',
                     'session --> browser --> server',
                     'session --> server')

LANGUAGE_CACHE_KEY = 'pyams_i18n.language.cache'


[docs]class INegotiator(Interface): """Local negotiator utility manager interface.""" policy = Choice(title=_("Language lookup policy"), description=_("Defines how the language lookup is working."), values=LANGUAGE_POLICIES, default='session --> browser --> server', required=True) server_language = Choice(title=_("Server language"), description=_("The language used for server policy."), vocabulary='PyAMS base languages', default='en', required=True) offered_languages = Set(title=_("Offered languages"), description=_("A list of offered languages. Can be used to " "user select languages which are offered in " "a skin."""), value_type=Choice(vocabulary='PyAMS base languages'), default={'en'}, required=True) cache_enabled = Bool(title=_("Language caching enabled"), description=_("Language caching enabled (per request)"), default=False) @invariant def check_policy(self): if self.policy not in LANGUAGE_POLICIES: raise Invalid(_("Unsupported language policy")) def get_language(self, request): """Return the matching language to use. If 'lang' parameter is defined into request, this lang is returned. Otherwise, returned language is based on browser settings, user's session or server's language, depending on negotiator's settings. If no match is found, None is returned. """ def clear_cache(self, request): """Clear cached language value"""
[docs]class II18nManager(Interface): """Context languages manager This interface is used to handle contents providing several languages """ languages = List(title=_("Proposed languages"), description=_("List of languages available for this content"), required=False, value_type=Choice(vocabulary='PyAMS base languages')) def get_languages(self): """Get full languages list"""
[docs]class IUserPreferredLanguage(Interface): """This interface provides language negotiation based on user preferences""" def get_language(self): """Return main user preferred language"""
[docs]class II18n(Interface): """I18n attribute interface""" def get_attribute(self, attribute, lang=None, request=None, default=None): """Get attribute in given language""" def query_attribute(self, attribute, lang=None, request=None): """Query attribute in given language"""