From: Isaac Jurado Date: Wed, 5 Nov 2014 16:15:08 +0000 (+0100) Subject: localedata: Check inheritance exceptions first X-Git-Tag: dev-2a51c9b95d06~36^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3ef0d6daaff4e9e2b60706e27034c9043b725483;p=thirdparty%2Fbabel.git localedata: Check inheritance exceptions first When deriving the parent locale from the given name, look first in the inheritance exception list. This will cover cases like "es_MX", which parent is "es_419" and not "es". Fixes https://github.com/mitsuhiko/babel/issues/97 --- diff --git a/babel/localedata/__init__.py b/babel/localedata/__init__.py index e6df0c4d..c48b9f58 100644 --- a/babel/localedata/__init__.py +++ b/babel/localedata/__init__.py @@ -81,11 +81,14 @@ def load(name, merge_inherited=True): if name == 'root' or not merge_inherited: data = {} else: - parts = name.split('_') - if len(parts) == 1: - parent = 'root' - else: - parent = '_'.join(parts[:-1]) + from babel.core import get_global + parent = get_global('parent_exceptions').get(name) + if not parent: + parts = name.split('_') + if len(parts) == 1: + parent = 'root' + else: + parent = '_'.join(parts[:-1]) data = load(parent).copy() filename = os.path.join(_dirname, '%s.dat' % name) fileobj = open(filename, 'rb') diff --git a/babel/numbers.py b/babel/numbers.py index 01af774d..d1f64725 100644 --- a/babel/numbers.py +++ b/babel/numbers.py @@ -258,7 +258,7 @@ def format_currency(number, currency, format=None, locale=LC_NUMERIC): >>> format_currency(1099.98, 'USD', locale='en_US') u'$1,099.98' >>> format_currency(1099.98, 'USD', locale='es_CO') - u'1.099,98\\xa0US$' + u'US$1.099,98' >>> format_currency(1099.98, 'EUR', locale='de_DE') u'1.099,98\\xa0\\u20ac' diff --git a/tests/test_numbers.py b/tests/test_numbers.py index 02332fbc..6fe67c04 100644 --- a/tests/test_numbers.py +++ b/tests/test_numbers.py @@ -243,7 +243,7 @@ def test_format_currency(): assert (numbers.format_currency(1099.98, 'USD', locale='en_US') == u'$1,099.98') assert (numbers.format_currency(1099.98, 'USD', locale='es_CO') - == u'1.099,98\xa0US$') + == u'US$1.099,98') assert (numbers.format_currency(1099.98, 'EUR', locale='de_DE') == u'1.099,98\xa0\u20ac') assert (numbers.format_currency(1099.98, 'EUR', u'\xa4\xa4 #,##0.00',