def testRequestLocale(self): eq = self.assertEqual unless = self.failUnless from zope.component import provideAdapter from zope.publisher.browser import BrowserLanguages from zope.publisher.interfaces.http import IHTTPRequest from zope.i18n.interfaces import IUserPreferredLanguages provideAdapter(BrowserLanguages, [IHTTPRequest], IUserPreferredLanguages) for httplang in ('it', 'it-ch', 'it-CH', 'IT', 'IT-CH', 'IT-ch'): req = self._createRequest({'HTTP_ACCEPT_LANGUAGE': httplang}) locale = req.locale unless(ILocale.providedBy(locale)) parts = httplang.split('-') lang = parts.pop(0).lower() territory = variant = None if parts: territory = parts.pop(0).upper() if parts: variant = parts.pop(0).upper() eq(locale.id.language, lang) eq(locale.id.territory, territory) eq(locale.id.variant, variant) # Now test for non-existant locale fallback req = self._createRequest({'HTTP_ACCEPT_LANGUAGE': 'xx'}) locale = req.locale unless(ILocale.providedBy(locale)) eq(locale.id.language, None) eq(locale.id.territory, None) eq(locale.id.variant, None) # If the first language is not available we should try others req = self._createRequest({'HTTP_ACCEPT_LANGUAGE': 'xx,en;q=0.5'}) locale = req.locale unless(ILocale.providedBy(locale)) eq(locale.id.language, 'en') eq(locale.id.territory, None) eq(locale.id.variant, None) # Regression test: there was a bug where territory and variant were # not reset req = self._createRequest({'HTTP_ACCEPT_LANGUAGE': 'xx-YY,en;q=0.5'}) locale = req.locale unless(ILocale.providedBy(locale)) eq(locale.id.language, 'en') eq(locale.id.territory, None) eq(locale.id.variant, None) from zope.component.testing import tearDown tearDown()
def test_locale_semantics(self): from zope.component import provideAdapter from zope.publisher.browser import BrowserLanguages from zope.publisher.interfaces.http import IHTTPRequest from zope.i18n.interfaces import IUserPreferredLanguages from zope.i18n.interfaces.locales import ILocale provideAdapter(BrowserLanguages, [IHTTPRequest], IUserPreferredLanguages) env_ = {'HTTP_ACCEPT_LANGUAGE': 'en'} # we should also test the correct semantics of the locale for httplang in ('it', 'it-ch', 'it-CH', 'IT', 'IT-CH', 'IT-ch'): env = env_.copy() env['HTTP_ACCEPT_LANGUAGE'] = httplang request = self._makeOne(environ=env) locale = request.locale self.assert_(ILocale.providedBy(locale)) parts = httplang.split('-') lang = parts.pop(0).lower() territory = variant = None if parts: territory = parts.pop(0).upper() if parts: variant = parts.pop(0).upper() self.assertEqual(locale.id.language, lang) self.assertEqual(locale.id.territory, territory) self.assertEqual(locale.id.variant, variant)
def test_locale_property_accessor(self): from zope.component import provideAdapter from zope.publisher.browser import BrowserLanguages from zope.publisher.interfaces.http import IHTTPRequest from zope.i18n.interfaces import IUserPreferredLanguages from zope.i18n.interfaces.locales import ILocale from ZPublisher.HTTPRequest import _marker provideAdapter(BrowserLanguages, [IHTTPRequest], IUserPreferredLanguages) env = {'HTTP_ACCEPT_LANGUAGE': 'en'} request = self._makeOne(environ=env) # before accessing request.locale for the first time, request._locale # is still a marker self.assert_(request._locale is _marker) # when accessing request.locale we will see an ILocale self.assert_(ILocale.providedBy(request.locale)) # and request._locale has been set self.assert_(request._locale is request.locale) # It won't be available through dictonary lookup, though self.assert_(request.get('locale') is None)
def test_locale_fallback(self): provideAdapter(BrowserLanguages, [IHTTPRequest], IUserPreferredLanguages) env = {'HTTP_ACCEPT_LANGUAGE': 'xx'} # Now test for non-existant locale fallback request = self._makeOne(environ=env) locale = request.locale self.assertTrue(ILocale.providedBy(locale)) self.assertTrue(locale.id.language is None) self.assertTrue(locale.id.territory is None) self.assertTrue(locale.id.variant is None)
def toLocale(iso): locale = None if ILocale.providedBy(iso): locale = iso else: localeIdentity = None if isinstance(iso, basestring): localeIdentity = parseLocaleIdentity(iso) elif ILocaleIdentity.providedBy(iso): localeIdentity = iso if localeIdentity is not None: locale = locales.getLocale(localeIdentity.language, localeIdentity.territory, localeIdentity.variant) if locale is None: raise TypeError('the argument must be a string, ILocaleIdentity or ILocale') return locale
def test_locale_property_override_via_form_other(self): provideAdapter(BrowserLanguages, [IHTTPRequest], IUserPreferredLanguages) env = {'HTTP_ACCEPT_LANGUAGE': 'en'} # we can still override request.locale with a form variable request = self._makeOne(environ=env) request.processInputs() self.assertTrue(ILocale.providedBy(request.locale)) request.form['locale'] = '1' self.assertEqual(request.locale, '1') request['locale'] = '2' self.assertEqual(request.locale, '2')
def test_locale_fallback(self): from zope.component import provideAdapter from zope.publisher.browser import BrowserLanguages from zope.publisher.interfaces.http import IHTTPRequest from zope.i18n.interfaces import IUserPreferredLanguages from zope.i18n.interfaces.locales import ILocale provideAdapter(BrowserLanguages, [IHTTPRequest], IUserPreferredLanguages) env = {'HTTP_ACCEPT_LANGUAGE': 'en', 'HTTP_ACCEPT_LANGUAGE': 'xx'} # Now test for non-existant locale fallback request = self._makeOne(environ=env) locale = request.locale self.assert_(ILocale.providedBy(locale)) self.assert_(locale.id.language is None) self.assert_(locale.id.territory is None) self.assert_(locale.id.variant is None)
def test_locale_property_override_via_form_other(self): from zope.component import provideAdapter from zope.publisher.browser import BrowserLanguages from zope.publisher.interfaces.http import IHTTPRequest from zope.i18n.interfaces import IUserPreferredLanguages from zope.i18n.interfaces.locales import ILocale provideAdapter(BrowserLanguages, [IHTTPRequest], IUserPreferredLanguages) env = {'HTTP_ACCEPT_LANGUAGE': 'en'} # we can still override request.locale with a form variable request = self._makeOne(environ=env) request.processInputs() self.assert_(ILocale.providedBy(request.locale)) request.form['locale'] = '1' self.assertEqual(request.locale, '1') request['locale'] = '2' self.assertEqual(request.locale, '2')
def test_locale_semantics(self): provideAdapter(BrowserLanguages, [IHTTPRequest], IUserPreferredLanguages) env_ = {'HTTP_ACCEPT_LANGUAGE': 'en'} # we should also test the correct semantics of the locale for httplang in ('it', 'it-ch', 'it-CH', 'IT', 'IT-CH', 'IT-ch'): env = env_.copy() env['HTTP_ACCEPT_LANGUAGE'] = httplang request = self._makeOne(environ=env) locale = request.locale self.assertTrue(ILocale.providedBy(locale)) parts = httplang.split('-') lang = parts.pop(0).lower() territory = variant = None if parts: territory = parts.pop(0).upper() if parts: variant = parts.pop(0).upper() self.assertEqual(locale.id.language, lang) self.assertEqual(locale.id.territory, territory) self.assertEqual(locale.id.variant, variant)
def testRequestLocale(self): eq = self.assertEqual unless = self.assertTrue from zope.publisher.browser import BrowserLanguages from zope.publisher.interfaces.http import IHTTPRequest from zope.i18n.interfaces import IUserPreferredLanguages provideAdapter(BrowserLanguages, [IHTTPRequest], IUserPreferredLanguages) for httplang in ('it', 'it-ch', 'it-CH', 'IT', 'IT-CH', 'IT-ch'): req = self._createRequest({'HTTP_ACCEPT_LANGUAGE': httplang}) locale = req.locale unless(ILocale.providedBy(locale)) parts = httplang.split('-') lang = parts.pop(0).lower() territory = variant = None if parts: territory = parts.pop(0).upper() if parts: variant = parts.pop(0).upper() eq(locale.id.language, lang) eq(locale.id.territory, territory) eq(locale.id.variant, variant) # Now test for non-existant locale fallback req = self._createRequest({'HTTP_ACCEPT_LANGUAGE': 'xx'}) locale = req.locale unless(ILocale.providedBy(locale)) eq(locale.id.language, None) eq(locale.id.territory, None) eq(locale.id.variant, None) # If the first language is not available we should try others req = self._createRequest({'HTTP_ACCEPT_LANGUAGE': 'xx,en;q=0.5'}) locale = req.locale unless(ILocale.providedBy(locale)) eq(locale.id.language, 'en') eq(locale.id.territory, None) eq(locale.id.variant, None) # Regression test: there was a bug where territory and variant were # not reset req = self._createRequest({'HTTP_ACCEPT_LANGUAGE': 'xx-YY,en;q=0.5'}) locale = req.locale unless(ILocale.providedBy(locale)) eq(locale.id.language, 'en') eq(locale.id.territory, None) eq(locale.id.variant, None) # Now test for improper quality value, should ignore the header req = self._createRequest({'HTTP_ACCEPT_LANGUAGE': 'en;q=xx'}) locale = req.locale unless(ILocale.providedBy(locale)) eq(locale.id.language, None) eq(locale.id.territory, None) eq(locale.id.variant, None) # Now test for very improper quality value, should ignore the header req = self._createRequest({'HTTP_ACCEPT_LANGUAGE': 'asdf;qwer'}) locale = req.locale unless(ILocale.providedBy(locale)) eq(locale.id.language, None) eq(locale.id.territory, None) eq(locale.id.variant, None)