From 12cb6df7728c8321905a08b0864b3ff0386c62cf Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Tue, 27 Apr 2010 16:44:52 +0000 Subject: 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. --- repoze/bfg/tests/test_configuration.py | 2 ++ repoze/bfg/tests/test_i18n.py | 36 ++++++++++++++++++++++------------ 2 files changed, 26 insertions(+), 12 deletions(-) (limited to 'repoze/bfg/tests') diff --git a/repoze/bfg/tests/test_configuration.py b/repoze/bfg/tests/test_configuration.py index 0a443720f..16b590cdd 100644 --- a/repoze/bfg/tests/test_configuration.py +++ b/repoze/bfg/tests/test_configuration.py @@ -3518,6 +3518,8 @@ class DummyRequest: subpath = () def __init__(self): self.environ = {'PATH_INFO':'/static'} + self.params = {} + self.cookies = {} def copy(self): return self def get_response(self, app): diff --git a/repoze/bfg/tests/test_i18n.py b/repoze/bfg/tests/test_i18n.py index fb79a802c..95017807f 100644 --- a/repoze/bfg/tests/test_i18n.py +++ b/repoze/bfg/tests/test_i18n.py @@ -94,6 +94,15 @@ class Test_negotiate_locale_name(unittest.TestCase): result = self._callFUT(request) self.assertEqual(result, 'settings') + def test_use_default_locale_negotiator(self): + from repoze.bfg.threadlocal import get_current_registry + registry = get_current_registry() + request = DummyRequest() + request.registry = registry + request._LOCALE_ = 'locale' + result = self._callFUT(request) + self.assertEqual(result, 'locale') + def test_default_default(self): request = DummyRequest() result = self._callFUT(request) @@ -219,24 +228,26 @@ class Test_default_locale_negotiator(unittest.TestCase): from repoze.bfg.i18n import default_locale_negotiator return default_locale_negotiator(request) - def test_from_settings(self): - from repoze.bfg.interfaces import ISettings - from repoze.bfg.threadlocal import get_current_registry - settings = {'default_locale_name':'dude'} - registry = get_current_registry() - registry.registerUtility(settings, ISettings) + def test_from_none(self): request = DummyRequest() result = self._callFUT(request) - self.assertEqual(result, 'dude') - - def test_settings_empty(self): + self.assertEqual(result, None) + + def test_from_request_attr(self): request = DummyRequest() + request._LOCALE_ = 'foo' result = self._callFUT(request) - self.assertEqual(result, 'en') - + self.assertEqual(result, 'foo') + def test_from_params(self): request = DummyRequest() - request.params['locale'] = 'foo' + request.params['_LOCALE_'] = 'foo' + result = self._callFUT(request) + self.assertEqual(result, 'foo') + + def test_from_cookies(self): + request = DummyRequest() + request.cookies['_LOCALE_'] = 'foo' result = self._callFUT(request) self.assertEqual(result, 'foo') @@ -370,6 +381,7 @@ class TestTranslations(unittest.TestCase): class DummyRequest(object): def __init__(self): self.params = {} + self.cookies = {} def dummy_negotiator(request): return 'bogus' -- cgit v1.2.3