Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2013-11-07 04:13:03 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2013-11-07 04:13:03 (GMT)
commit98b795c6c41b9d0f2493fb4b8950e8f81ba6faa1 (patch)
treeecaf3c9e53f967b342d6c6500162a3ab2ce35aeb
parent44504e120f60697e024bd4f1ec25c6f78a7fb11c (diff)
Prioritize LANGUAGE envar while detecting default locales
-rw-r--r--sugar_network/toolkit/__init__.py43
-rw-r--r--tests/__init__.py1
-rwxr-xr-xtests/units/db/index.py2
-rwxr-xr-xtests/units/db/routes.py6
-rwxr-xr-xtests/units/toolkit/toolkit.py4
5 files changed, 28 insertions, 28 deletions
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'))