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' ...@@ -54,6 +54,7 @@ for l in Language.objects.exclude(name__contains='generated').values_list('name'
{% trans "Danish" %} {% trans "Danish" %}
{% trans "Dogri" %} {% trans "Dogri" %}
{% trans "Dutch" %} {% trans "Dutch" %}
{% trans "Dutch (Belgium)" %}
{% trans "Dzongkha" %} {% trans "Dzongkha" %}
{% trans "English" %} {% trans "English" %}
{% trans "English (Australia)" %} {% trans "English (Australia)" %}
...@@ -152,6 +153,7 @@ for l in Language.objects.exclude(name__contains='generated').values_list('name' ...@@ -152,6 +153,7 @@ for l in Language.objects.exclude(name__contains='generated').values_list('name'
{% trans "Serbian" %} {% trans "Serbian" %}
{% trans "Serbian (cyrillic)" %} {% trans "Serbian (cyrillic)" %}
{% trans "Serbian (latin)" %} {% trans "Serbian (latin)" %}
{% trans "Serbo-Croatian" %}
{% trans "Simplified Chinese" %} {% trans "Simplified Chinese" %}
{% trans "Sindhi" %} {% trans "Sindhi" %}
{% trans "Sinhala" %} {% trans "Sinhala" %}
......
...@@ -328,6 +328,18 @@ EXTRALANGS = ( ...@@ -328,6 +328,18 @@ EXTRALANGS = (
1, 1,
'0', '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 # Wrong language code used by Java
( (
'in', 'in',
...@@ -634,3 +646,13 @@ PLURAL_NAMES = { ...@@ -634,3 +646,13 @@ PLURAL_NAMES = {
pgettext_lazy('Plural form description', 'Other'), 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): ...@@ -81,12 +81,12 @@ class LanguageManager(models.Manager):
self._default_lang = self.get(code='en') self._default_lang = self.get(code='en')
return self._default_lang return self._default_lang
def try_get(self, code): def try_get(self, **kwargs):
''' '''
Tries to get language by code. Tries to get language by code.
''' '''
try: try:
return self.get(code=code) return self.get(**kwargs)
except Language.DoesNotExist: except Language.DoesNotExist:
return None return None
...@@ -117,10 +117,22 @@ class LanguageManager(models.Manager): ...@@ -117,10 +117,22 @@ class LanguageManager(models.Manager):
''' '''
# First try getting langauge as is # First try getting langauge as is
ret = self.try_get(code) ret = self.try_get(code=code)
if ret is not None: if ret is not None:
return ret 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
# Parse the string # Parse the string
lang, country = self.parse_lang_country(code) lang, country = self.parse_lang_country(code)
...@@ -139,13 +151,13 @@ class LanguageManager(models.Manager): ...@@ -139,13 +151,13 @@ class LanguageManager(models.Manager):
else: else:
newcode = lang.lower() newcode = lang.lower()
ret = self.try_get(newcode) ret = self.try_get(code=newcode)
if ret is not None: if ret is not None:
return ret return ret
# Try canonical variant # Try canonical variant
if SIMPLIFY_LANGUAGES and newcode in data.DEFAULT_LANGS: 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: if ret is not None:
return ret return ret
...@@ -170,12 +182,12 @@ class LanguageManager(models.Manager): ...@@ -170,12 +182,12 @@ class LanguageManager(models.Manager):
# Check for different variant # Check for different variant
if baselang is None and '@' in code: if baselang is None and '@' in code:
parts = code.split('@') parts = code.split('@')
baselang = self.try_get(parts[0]) baselang = self.try_get(code=parts[0])
# Check for different country # Check for different country
if baselang is None and '_' in code or '-' in code: if baselang is None and '_' in code or '-' in code:
parts = code.replace('-', '_').split('_') parts = code.replace('-', '_').split('_')
baselang = self.try_get(parts[0]) baselang = self.try_get(code=parts[0])
if baselang is not None: if baselang is not None:
lang.name = baselang.name lang.name = baselang.name
......
...@@ -56,6 +56,12 @@ class LanguagesTest(TestCase): ...@@ -56,6 +56,12 @@ class LanguagesTest(TestCase):
'ltr', 'ltr',
'n != 1', 'n != 1',
), ),
(
'portuguese_portugal',
'pt_PT',
'ltr',
'n > 1',
),
( (
'pt-rBR', 'pt-rBR',
'pt_BR', '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