diff options
| author | Chris McDonough <chrism@agendaless.com> | 2010-04-27 16:44:52 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2010-04-27 16:44:52 +0000 |
| commit | 12cb6df7728c8321905a08b0864b3ff0386c62cf (patch) | |
| tree | 945e3cbf094775c57f0a6b94f36e78885cbd4a53 /repoze/bfg/i18n.py | |
| parent | 4c8f4d965e06b6bd584151896bfb37663cd69501 (diff) | |
| download | pyramid-12cb6df7728c8321905a08b0864b3ff0386c62cf.tar.gz pyramid-12cb6df7728c8321905a08b0864b3ff0386c62cf.tar.bz2 pyramid-12cb6df7728c8321905a08b0864b3ff0386c62cf.zip | |
Features
--------
- A locale negotiator no longer needs to be registered explicitly. The
default locale negotiator at
``repoze.bfg.i18n.default_locale_negotiator`` is now used
unconditionally as... um, the default locale negotiator.
- The default locale negotiator has become more complex.
* First, the negotiator looks for the ``_LOCALE_`` attribute of
the request object (possibly set by an :term:`event listener`).
* Then it looks for the ``request.params['_LOCALE_']`` value.
* Then it looks for the ``request.cookies['_LOCALE_']`` value.
Backwards Incompatibilities
---------------------------
- The default locale negotiator now looks for the parameter named
``_LOCALE_`` rather than a parameter named ``locale`` in
``request.params``.
Behavior Changes
----------------
- A locale negotiator may now return ``None``, signifying that the
default locale should be used.
Documentation
-------------
- Documentation concerning locale negotiation in the
Internationalizationa and Localization chapter was updated.
Diffstat (limited to 'repoze/bfg/i18n.py')
| -rw-r--r-- | repoze/bfg/i18n.py | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/repoze/bfg/i18n.py b/repoze/bfg/i18n.py index e3b276331..640ee030b 100644 --- a/repoze/bfg/i18n.py +++ b/repoze/bfg/i18n.py @@ -96,14 +96,27 @@ class Localizer(object): def default_locale_negotiator(request): - """ The default :term:`locale negotiator`. Returns a locale - name based on ``request.params.get('locale')`` or the - ``default_locale_name`` settings option; or ``en`` if all else - fails.""" - locale_name = request.params.get('locale') + """ The default :term:`locale negotiator`. Returns a locale name + or ``None``. + + - First, the negotiator looks for the ``_LOCALE_`` attribute of + the request object (possibly set by an :term:`event listener`). + + - Then it looks for the ``request.params['_LOCALE_']`` value. + + - Then it looks for the ``request.cookies['_LOCALE_']`` value. + + - Finally, the negotiator returns ``None`` if the locale could not + be determined via any of the previous checks (when a locale + negotiator returns ``None``, it signifies that the + :term:`default locale` should be used.) + """ + name = '_LOCALE_' + locale_name = getattr(request, name, None) if locale_name is None: - settings = get_settings() or {} - locale_name = settings.get('default_locale_name', 'en') + locale_name = request.params.get(name) + if locale_name is None: + locale_name = request.cookies.get(name) return locale_name def negotiate_locale_name(request): @@ -113,12 +126,14 @@ def negotiate_locale_name(request): registry = request.registry except AttributeError: registry = get_current_registry() - negotiator = registry.queryUtility(ILocaleNegotiator) - if negotiator is None: + negotiator = registry.queryUtility(ILocaleNegotiator, + default=default_locale_negotiator) + locale_name = negotiator(request) + + if locale_name is None: settings = get_settings() or {} locale_name = settings.get('default_locale_name', 'en') - else: - locale_name = negotiator(request) + return locale_name def get_locale_name(request): |
