Mercurial > babel > mirror
changeset 592:e6b1efa9a255 trunk
fix Locale.default to return Locales with correct territory information
author | fschwarz |
---|---|
date | Thu, 09 Aug 2012 07:47:09 +0000 |
parents | d1618dfaf114 |
children | 99983baf1067 |
files | babel/core.py babel/tests/core.py |
diffstat | 2 files changed, 31 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- 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):
--- 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