# HG changeset patch # User fschwarz # Date 1344498429 0 # Node ID e6b1efa9a2557ca2d0e1a591f135d8c3a0b49e10 # Parent d1618dfaf114836c40db6c35aaac4ddd22b69bcd fix Locale.default to return Locales with correct territory information diff --git a/babel/core.py b/babel/core.py --- a/babel/core.py +++ b/babel/core.py @@ -144,7 +144,7 @@ ... 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 @@ :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 --- a/babel/tests/core.py +++ b/babel/tests/core.py @@ -19,7 +19,29 @@ 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 @@ 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