in bedrock/base/i18n.py [0:0]
def normalize_language(language):
"""
Given a language code, returns the language code supported by Bedrock
in the proper case, for example "eN-us" --> "en-US" - or None if
Bedrock doesn't support the language code.
We also convert it to a specified fallback language if the actual
presented code is not available _and_ we have a fallback specced in
settings.
"""
if not language:
return None
lang_code = language
if lang_code in settings.LANGUAGE_URL_MAP_WITH_FALLBACKS:
return settings.LANGUAGE_URL_MAP_WITH_FALLBACKS[lang_code]
# Reformat the lang code to be mixed-case, as we expect
# them to be for our lookup
lang, _partition, classifier = language.partition("-")
lang = lang.lower() # this part is _always_ lowercase
_special_cases = ["hant"]
if classifier:
if "-" in classifier or classifier in _special_cases:
_classifier, _partition, rest = classifier.partition("-")
if _classifier.lower() in _special_cases:
# support zh-hant-tw -> zh-Hant-TW
_classifier = capfirst(_classifier)
if rest:
classifier = f"{_classifier}-{rest.upper()}"
else:
classifier = _classifier
else:
# Support patterns like ja-JP-mac
classifier = f"{_classifier.upper()}-{rest}"
else:
classifier = classifier.upper()
lang_code = f"{lang}-{classifier}"
else:
lang_code = lang
try:
return settings.LANGUAGE_URL_MAP_WITH_FALLBACKS[lang_code]
except KeyError:
pre = lang_code.split("-")[0]
return settings.LANGUAGE_URL_MAP_WITH_FALLBACKS.get(pre)