Skip to main content
Help us improve PyPI by participating in user testing. All experience levels needed!

Zope3 i18n language negotiator.

Project description

This package provides a persistent INegotiator utility implementation.

Detailed Documentation


This package provides a local implementation of the INegotiator interface defined in zope.i18n.interfaces. The negotiator implementation offers some additional usefull attributes which are explained later. This INegotiator is also used in the z3c.language.switch package.

Let’s setup a negotiator:

>>> from z3c.language.negotiator import app
>>> negotiator = app.Negotiator()

Such a negotiator provides the following interfaces:

>>> from zope.i18n.interfaces import INegotiator
>>> from z3c.language.negotiator.interfaces import INegotiatorManager
>>> INegotiator.providedBy(negotiator)
>>> INegotiatorManager.providedBy(negotiator)

By default a negotiator has the following values:

>>> negotiator.policy
'session --> browser --> server'
>>> negotiator.serverLanguage
>>> negotiator.offeredLanguages

If we set a policy with a wrong value, we will get a ValueError:

>>> negotiator.policy = u'wrong'
Traceback (most recent call last):
ValueError: ('Not a valid policy name.', u'wrong')

Register the negotiator as a global utility:

>>> import zope.component
>>> zope.component.provideUtility(negotiator, INegotiator)

Now we can use the vocabulary and see what offered languages are available:

>>> from z3c.language.negotiator import vocabulary
>>> vocab = vocabulary.OfferedLanguagesVocabulary(None)
>>> vocab
<z3c.language.negotiator.vocabulary.OfferedLanguagesVocabulary object at ...>
>>> vocab._terms

Add some offered languages and check the vocabulary again:

>>> negotiator.offeredLanguages = [u'de', u'fr']
>>> negotiator.offeredLanguages
[u'de', u'fr']

Try to get the utility and ceck the offeredLanguages again:

>>> util = zope.component.getUtility(INegotiator)
>>> util.offeredLanguages
[u'de', u'fr']

Now check the vocabulary again:

>>> vocab = vocabulary.OfferedLanguagesVocabulary(None)
>>> vocab._terms[0].value
>>> vocab._terms[0].token
>>> vocab._terms[0].title
>>> vocab._terms[1].value
>>> vocab._terms[1].token
>>> vocab._terms[1].title

See for more tests.


1.1.3 (2010-10-01)

  • Cache ONLY for the session setting. Others turned out as a bad idea. It’s pretty straightforward now, we’re caching session data lookups because those lookups are sooo slow. Would be better done in z3c.language.session, but there’s nothing persistent.

1.1.2 (2010-08-05)

  • Fixed an issue with the cache: The cache just ignored the languages parameter. The first request saved a specific language (e.g. de-de) to the cache, but the second did not have that available in languages, still the cached value was returned. Worst case the uncached method is called.

1.1.1 (2010-07-21)

  • added language choice caching, is by default turned off
  • test coverage is now 100%

1.1.0 (2009-11-29)

  • adjust dependencies, reflect changes in zope packages
  • clanup tests, remove unused tests and skip using

1.0.1 (2008-01-24)

  • Bug: Corrected meta data.

1.0.0 (2008-01-21)

  • Restructure: Removed the two vocabularies AvailableTranslationDomainLanguagesVocabulary and AvailableTranslationDomainLanguagesVocabularyForZ3C which depend on the implementation. Note these vocabularies are not persistent and if you will need it, let’s implement this in another package. This allows us to skip all dependencies to
  • Restructure: Moved zope.language.negotiator to it’s namespace package.

Project details

Release history Release notifications

This version
History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
z3c.language.negotiator-1.1.3.tar.gz (11.6 kB) Copy SHA256 hash SHA256 Source None Oct 1, 2010

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page