Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
{'language': 'sgn', 'region': 'US'}
>>> pprint(tag_to_meaning('zh-cmn-Hant')) # promote extlangs to languages
{'language': 'cmn', 'macrolanguage': 'zh', 'script': 'Hant'}
>>> pprint(tag_to_meaning('zh-cmn-Hant', normalize=False))
{'extlang': {'cmn'}, 'language': 'zh', 'script': 'Hant'}
"""
meaning = {}
# if the complete tag appears as something to normalize, do the
# normalization right away. Smash case when checking, because the
# case normalization that comes from parse() hasn't been applied yet.
if normalize and tag.lower() in NORMALIZED_LANGUAGES:
tag = NORMALIZED_LANGUAGES[tag.lower()]
components = parse(tag)
for typ, value in components:
if typ == 'extlang' and normalize and meaning['language']:
# smash extlangs when possible
minitag = '%s-%s' % (meaning['language'], value)
if minitag in NORMALIZED_LANGUAGES:
meaning.update(tag_to_meaning(NORMALIZED_LANGUAGES[minitag], normalize))
else:
meaning.setdefault(typ, set()).add(value)
elif typ in {'extlang', 'variant', 'extension'}:
meaning.setdefault(typ, set()).add(value)
elif typ == 'language':
if value == 'und':
pass
elif normalize and value in NORMALIZED_LANGUAGES:
replacement = NORMALIZED_LANGUAGES[value]