diff options
| author | Claude Paroz <claude@2xlibre.net> | 2021-03-21 19:03:57 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2021-03-22 07:08:58 +0100 |
| commit | d11b9ffcc0b1d6b8e87df6319f09bf284196e41a (patch) | |
| tree | 612d11b9b37bcd7084e368e420abad9142a6d0f3 | |
| parent | 9d130920e61570d1e8dfd8ee174bc5d86771f054 (diff) | |
Fixed #32581 -- Prevented to_locale() from corrupting locale names.
| -rw-r--r-- | django/utils/translation/__init__.py | 6 | ||||
| -rw-r--r-- | tests/i18n/tests.py | 4 |
2 files changed, 7 insertions, 3 deletions
diff --git a/django/utils/translation/__init__.py b/django/utils/translation/__init__.py index aa5cd33f5b..29ac60ad1d 100644 --- a/django/utils/translation/__init__.py +++ b/django/utils/translation/__init__.py @@ -201,9 +201,9 @@ def to_language(locale): def to_locale(language): """Turn a language name (en-us) into a locale name (en_US).""" - language, _, country = language.lower().partition('-') + lang, _, country = language.lower().partition('-') if not country: - return language + return language[:3].lower() + language[3:] # 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 @@ -212,7 +212,7 @@ def to_locale(language): country = country.title() if len(country) > 2 else country.upper() if tail: country += '-' + tail - return language + '_' + country + return lang + '_' + country def get_language_from_request(request, check_path=False): diff --git a/tests/i18n/tests.py b/tests/i18n/tests.py index 55cd35f7f3..5dd3593cac 100644 --- a/tests/i18n/tests.py +++ b/tests/i18n/tests.py @@ -313,12 +313,16 @@ class TranslationTests(SimpleTestCase): ('EN', 'en'), ('en-us', 'en_US'), ('EN-US', 'en_US'), + ('en_US', 'en_US'), # With > 2 characters after the dash. ('sr-latn', 'sr_Latn'), ('sr-LATN', 'sr_Latn'), + ('sr_Latn', 'sr_Latn'), # 3-char language codes. ('ber-MA', 'ber_MA'), ('BER-MA', 'ber_MA'), + ('BER_MA', 'ber_MA'), + ('ber_MA', 'ber_MA'), # With private use subtag (x-informal). ('nl-nl-x-informal', 'nl_NL-x-informal'), ('NL-NL-X-INFORMAL', 'nl_NL-x-informal'), |
