diff --git a/django/utils/translation/trans_real.py b/django/utils/translation/trans_real.py index 48ed7cc885..6e7fb8cf50 100644 --- a/django/utils/translation/trans_real.py +++ b/django/utils/translation/trans_real.py @@ -40,6 +40,9 @@ def to_locale(language, to_lower=False): if to_lower: return language[:p].lower()+'_'+language[p+1:].lower() else: + # Get correct locale for sr-latn + if len(language[p+1:]) > 2: + return language[:p].lower()+'_'+language[p+1].upper()+language[p+2:].lower() return language[:p].lower()+'_'+language[p+1:].upper() else: return language.lower() diff --git a/tests/regressiontests/i18n/tests.py b/tests/regressiontests/i18n/tests.py index 94e792cf54..d97ff31d48 100644 --- a/tests/regressiontests/i18n/tests.py +++ b/tests/regressiontests/i18n/tests.py @@ -4,7 +4,7 @@ import misc regressions = ur""" Format string interpolation should work with *_lazy objects. ->>> from django.utils.translation import ugettext, ugettext_lazy, activate, deactivate, gettext_lazy +>>> from django.utils.translation import ugettext, ugettext_lazy, activate, deactivate, gettext_lazy, to_locale >>> s = ugettext_lazy('Add %(name)s') >>> d = {'name': 'Ringo'} >>> s % d @@ -17,6 +17,21 @@ u'Ringo hinzuf\xfcgen' u'Dodaj Ringo' >>> deactivate() +Tests the to_locale function and the special case of Serbian Latin (refs #12230 and r11299) + +>>> to_locale('en-us') +'en_US' +>>> to_locale('sr-lat') +'sr_Lat' + +Test the to_language function + +>>> from django.utils.translation.trans_real import to_language +>>> to_language('en_US') +'en-us' +>>> to_language('sr_Lat') +'sr-lat' + It should be possible to compare *_lazy objects. >>> s1 = ugettext_lazy('Add %(name)s')