Commit 7b348029 authored by Michal Čihař's avatar Michal Čihař

More flexible languages handling

Allow to use full language name as filename.

For example used here:

https://github.com/moneymanagerex/moneymanagerex/tree/master/poSigned-off-by: default avatarMichal Čihař <michal@cihar.com>
parent fbe3b563
......@@ -54,6 +54,7 @@ for l in Language.objects.exclude(name__contains='generated').values_list('name'
{% trans "Danish" %}
{% trans "Dogri" %}
{% trans "Dutch" %}
{% trans "Dutch (Belgium)" %}
{% trans "Dzongkha" %}
{% trans "English" %}
{% trans "English (Australia)" %}
......@@ -152,6 +153,7 @@ for l in Language.objects.exclude(name__contains='generated').values_list('name'
{% trans "Serbian" %}
{% trans "Serbian (cyrillic)" %}
{% trans "Serbian (latin)" %}
{% trans "Serbo-Croatian" %}
{% trans "Simplified Chinese" %}
{% trans "Sindhi" %}
{% trans "Sinhala" %}
......
......@@ -328,6 +328,18 @@ EXTRALANGS = (
1,
'0',
),
(
'sh',
u'Serbo-Croatian',
3,
'n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2',
),
(
'nl_BE',
u'Dutch (Belgium)',
2,
'(n != 1)',
),
# Wrong language code used by Java
(
'in',
......@@ -634,3 +646,13 @@ PLURAL_NAMES = {
pgettext_lazy('Plural form description', 'Other'),
),
}
LOCALE_ALIASES = {
'chinese_chs': 'zh_CN',
'chinese_zh': 'zh_TW',
'dutch_be': 'nl_BE',
'english-uk': 'en_GB',
'portuguese_br': 'pt_BR',
'portuguese_portugal': 'pt_PT',
'serbo-croatian': 'sh',
}
......@@ -81,12 +81,12 @@ class LanguageManager(models.Manager):
self._default_lang = self.get(code='en')
return self._default_lang
def try_get(self, code):
def try_get(self, **kwargs):
'''
Tries to get language by code.
'''
try:
return self.get(code=code)
return self.get(**kwargs)
except Language.DoesNotExist:
return None
......@@ -117,7 +117,19 @@ class LanguageManager(models.Manager):
'''
# First try getting langauge as is
ret = self.try_get(code)
ret = self.try_get(code=code)
if ret is not None:
return ret
# Try using name
ret = self.try_get(name=code.lower())
if ret is not None:
return ret
# Handle aliases
if code in data.LOCALE_ALIASES:
code = data.LOCALE_ALIASES[code]
ret = self.try_get(name=code)
if ret is not None:
return ret
......@@ -139,13 +151,13 @@ class LanguageManager(models.Manager):
else:
newcode = lang.lower()
ret = self.try_get(newcode)
ret = self.try_get(code=newcode)
if ret is not None:
return ret
# Try canonical variant
if SIMPLIFY_LANGUAGES and newcode in data.DEFAULT_LANGS:
ret = self.try_get(lang.lower())
ret = self.try_get(code=lang.lower())
if ret is not None:
return ret
......@@ -170,12 +182,12 @@ class LanguageManager(models.Manager):
# Check for different variant
if baselang is None and '@' in code:
parts = code.split('@')
baselang = self.try_get(parts[0])
baselang = self.try_get(code=parts[0])
# Check for different country
if baselang is None and '_' in code or '-' in code:
parts = code.replace('-', '_').split('_')
baselang = self.try_get(parts[0])
baselang = self.try_get(code=parts[0])
if baselang is not None:
lang.name = baselang.name
......
......@@ -56,6 +56,12 @@ class LanguagesTest(TestCase):
'ltr',
'n != 1',
),
(
'portuguese_portugal',
'pt_PT',
'ltr',
'n > 1',
),
(
'pt-rBR',
'pt_BR',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment