diff --git a/django/utils/translation/__init__.py b/django/utils/translation/__init__.py index 28ab9c015f..7f5600be04 100644 --- a/django/utils/translation/__init__.py +++ b/django/utils/translation/__init__.py @@ -204,18 +204,18 @@ def to_language(locale): def to_locale(language): """Turn a language name (en-us) into a locale name (en_US).""" - language = language.lower() - parts = language.split('-') - try: - country = parts[1] - except IndexError: + language, _, country = language.lower().partition('-') + if not country: return language # A language with > 2 characters after the dash only has its first # character after the dash capitalized; e.g. sr-latn becomes sr_Latn. # A language with 2 characters after the dash has both characters # capitalized; e.g. en-us becomes en_US. - parts[1] = country.title() if len(country) > 2 else country.upper() - return parts[0] + '_' + '-'.join(parts[1:]) + country, _, tail = country.partition('-') + country = country.title() if len(country) > 2 else country.upper() + if tail: + country += '-' + tail + return language + '_' + country def get_language_from_request(request, check_path=False):