diff options
| author | Tim Graham <timograham@gmail.com> | 2017-09-07 10:09:07 -0400 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2017-09-08 13:46:00 -0400 |
| commit | 0c4ac12a7b4184ff2535faa7a0a79ee33c8fff7f (patch) | |
| tree | e23e2d04bf6fe20dc3d942a68a952fa3a75b1a10 /django | |
| parent | 9829b75d5bf468cb18e0fffdfc4a65dd7d8a6b2d (diff) | |
Fixed #28546 -- Fixed translation's to_locale() with langauge subtags.
Thanks Brent Hand for the initial patch.
Diffstat (limited to 'django')
| -rw-r--r-- | django/utils/translation/trans_real.py | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/django/utils/translation/trans_real.py b/django/utils/translation/trans_real.py index a9447d7896..9ec8085dae 100644 --- a/django/utils/translation/trans_real.py +++ b/django/utils/translation/trans_real.py @@ -58,14 +58,19 @@ def reset_cache(**kwargs): def to_locale(language): """Turn a language name (en-us) into a locale name (en_US).""" - p = language.find('-') - if p >= 0: - # 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() + language = language.lower() + parts = language.split('-') + try: + country = parts[1] + except IndexError: + return language else: - return language.lower() + # 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:]) def to_language(locale): |
