From: Felix Schwarz Date: Thu, 9 Aug 2012 07:47:09 +0000 (+0000) Subject: fix Locale.default to return Locales with correct territory information X-Git-Tag: 1.0~155 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d83116dff9b23f586a01f61857c5b952bfed9c0d;p=thirdparty%2Fbabel.git fix Locale.default to return Locales with correct territory information --- diff --git a/babel/core.py b/babel/core.py index c9608f71..0d1a751d 100644 --- a/babel/core.py +++ b/babel/core.py @@ -144,7 +144,7 @@ class Locale(object): ... os.environ[name] = '' >>> os.environ['LANG'] = 'fr_FR.UTF-8' >>> Locale.default('LC_MESSAGES') - Locale('fr_FR') + Locale('fr', territory='FR') :param category: one of the ``LC_XXX`` environment variable names :param aliases: a dictionary of aliases for locale identifiers @@ -153,7 +153,8 @@ class Locale(object): :rtype: `Locale` :see: `default_locale` """ - return cls(default_locale(category, aliases=aliases)) + locale_string = default_locale(category, aliases=aliases) + return cls.parse(locale_string) @classmethod def negotiate(cls, preferred, available, sep='_', aliases=LOCALE_ALIASES): diff --git a/babel/tests/core.py b/babel/tests/core.py index 03083787..894387b9 100644 --- a/babel/tests/core.py +++ b/babel/tests/core.py @@ -19,7 +19,29 @@ from babel import core from babel.core import default_locale, Locale -class LocaleTest(unittest.TestCase): +class LocaleEnvironmentTestMixin(object): + + def setUp(self): + self._old_locale_settings = self.current_locale_settings() + + def tearDown(self): + self.reset_locale_settings(self._old_locale_settings) + + def current_locale_settings(self): + settings = {} + for name in ('LC_MESSAGES', 'LANGUAGE', 'LC_ALL', 'LC_CTYPE', 'LANG'): + settings[name] = os.environ.get(name) + return settings + + def reset_locale_settings(self, settings): + for name, value in settings.items(): + if value is not None: + os.environ[name] = value + elif name in os.environ: + del os.environ[name] + + +class LocaleTest(LocaleEnvironmentTestMixin, unittest.TestCase): def test_locale_provides_access_to_cldr_locale_data(self): locale = Locale('en', 'US') @@ -40,24 +62,12 @@ class LocaleTest(unittest.TestCase): bad_en_US = Locale('en_US') self.assertNotEqual(en_US, bad_en_US) - -class DefaultLocaleTest(unittest.TestCase): - - def setUp(self): - self._old_locale_settings = self._current_locale_settings() - - def tearDown(self): - self._set_locale_settings(self._old_locale_settings) + def test_can_return_default_locale(self): + os.environ['LC_MESSAGES'] = 'fr_FR.UTF-8' + self.assertEqual(Locale('fr', 'FR'), Locale.default('LC_MESSAGES')) - def _current_locale_settings(self): - settings = {} - for name in ('LANGUAGE', 'LC_ALL', 'LC_CTYPE', 'LANG'): - settings[name] = os.environ[name] - return settings - - def _set_locale_settings(self, settings): - for name, value in settings.items(): - os.environ[name] = value + +class DefaultLocaleTest(LocaleEnvironmentTestMixin, unittest.TestCase): def test_ignore_invalid_locales_in_lc_ctype(self): # This is a regression test specifically for a bad LC_CTYPE setting on