From 98b795c6c41b9d0f2493fb4b8950e8f81ba6faa1 Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Thu, 07 Nov 2013 04:13:03 +0000 Subject: Prioritize LANGUAGE envar while detecting default locales --- diff --git a/sugar_network/toolkit/__init__.py b/sugar_network/toolkit/__init__.py index fee7897..d56ec59 100644 --- a/sugar_network/toolkit/__init__.py +++ b/sugar_network/toolkit/__init__.py @@ -117,41 +117,42 @@ def default_lang(): """Default language to fallback for localized strings. :returns: - string in format of HTTP's Accept-Language, e.g., `en-gb`. + string in format of HTTP's Accept-Language """ - global _default_lang - - if _default_lang is None: - import locale - lang = locale.getdefaultlocale()[0] - if not lang or lang == 'C': - _default_lang = 'en' - else: - lang, region = lang.lower().split('_') - if lang == region: - _default_lang = lang - else: - _default_lang = '-'.join([lang, region]) - - return _default_lang + return default_langs()[0] def default_langs(): """Default languages list, i.e., including all secondory languages. :returns: - list of strings in format of HTTP's Accept-Language, e.g., `ru,en-gb`. + list of strings in format of HTTP's Accept-Language """ global _default_langs if _default_langs is None: - langs = os.environ.get('LANGUAGE') - if langs: - _default_langs = langs.split(':') + locales = os.environ.get('LANGUAGE') + if locales: + locales = [i for i in locales.split(':') if i.strip()] + else: + from locale import getdefaultlocale + locales = [getdefaultlocale()[0]] + if not locales: + _default_langs = ['en'] else: - _default_langs = [default_lang()] + _default_langs = [] + for locale in locales: + lang = locale.strip().split('.')[0].lower() + if lang == 'c': + lang = 'en' + elif '_' in lang: + lang, region = lang.split('_') + if lang != region: + lang = '-'.join([lang, region]) + _default_langs.append(lang) + _logger.info('Default languages are %r', _default_langs) return _default_langs diff --git a/tests/__init__.py b/tests/__init__.py index a82b1f8..fdc7449 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -57,7 +57,6 @@ class Test(unittest.TestCase): os.environ['LANG'] = 'en_US' os.environ['LANGUAGE'] = 'en_US' - toolkit._default_lang = 'en-us' toolkit._default_langs = None global tmpdir diff --git a/tests/units/db/index.py b/tests/units/db/index.py index 45dcbb8..ef6df53 100755 --- a/tests/units/db/index.py +++ b/tests/units/db/index.py @@ -567,7 +567,7 @@ class IndexTest(tests.Test): self.assertEqual(1, len(commits)) def test_SortLocalizedProps(self): - toolkit._default_lang = 'default_lang' + toolkit._default_langs = ['default_lang'] current_lang = locale.getdefaultlocale()[0].replace('_', '-') db = Index({'prop': IndexedProperty('prop', 1, 'A', localized=True)}) diff --git a/tests/units/db/routes.py b/tests/units/db/routes.py index b6e0c11..4dd0fea 100755 --- a/tests/units/db/routes.py +++ b/tests/units/db/routes.py @@ -384,7 +384,7 @@ class RoutesTest(tests.Test): self.assertEqual(-1, self.call('GET', path=['testdocument', guid, 'prop'])) def test_LocalizedSet(self): - toolkit._default_lang = 'en' + toolkit._default_langs = ['en'] class TestDocument(db.Resource): @@ -449,7 +449,7 @@ class RoutesTest(tests.Test): }, }) - toolkit._default_lang = 'en' + toolkit._default_langs = ['en'] self.assertEqual( {'localized_prop': 'value_en'}, @@ -494,7 +494,7 @@ class RoutesTest(tests.Test): [{'localized_prop': 'value_en'}], self.call('GET', path=['testdocument'], accept_language=['foo', 'fr', 'za'], reply=['localized_prop'])['result']) - toolkit._default_lang = 'foo' + toolkit._default_langs = ['foo'] fallback_lang = sorted(['ru', 'es', 'en'])[0] self.assertEqual( diff --git a/tests/units/toolkit/toolkit.py b/tests/units/toolkit/toolkit.py index b901583..8c13b84 100755 --- a/tests/units/toolkit/toolkit.py +++ b/tests/units/toolkit/toolkit.py @@ -423,7 +423,7 @@ class UtilTest(tests.Test): def test_gettext(self): # Fallback to default lang - toolkit._default_lang = 'default' + toolkit._default_langs = ['default'] self.assertEqual('foo', toolkit.gettext({'lang': 'foo', 'default': 'bar'}, 'lang')) self.assertEqual('bar', toolkit.gettext({'lang': 'foo', 'default': 'bar'}, 'fake')) @@ -445,7 +445,7 @@ class UtilTest(tests.Test): self.assertEqual('foo', toolkit.gettext({'1-a': 'foo', '2': 'bar', 'default': 'default'}, '1-b')) def test_gettext_EnAsTheLastResort(self): - toolkit._default_lang = 'en-us' + toolkit._default_langs = ['en-us'] self.assertEqual('right', toolkit.gettext({'a': 'wrong', 'en': 'right'}, 'probe')) self.assertEqual('exact', toolkit.gettext({'a': 'wrong', 'en': 'right', 'probe': 'exact'}, 'probe')) -- cgit v0.9.1