You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.7 KiB
72 lines
2.7 KiB
5 months ago
|
# -- encoding: UTF-8 --
|
||
|
from babel.core import get_global
|
||
|
|
||
|
|
||
|
def get_official_languages(territory, regional=False, de_facto=False):
|
||
|
"""
|
||
|
Get the official language(s) for the given territory.
|
||
|
|
||
|
The language codes, if any are known, are returned in order of descending popularity.
|
||
|
|
||
|
If the `regional` flag is set, then languages which are regionally official are also returned.
|
||
|
|
||
|
If the `de_facto` flag is set, then languages which are "de facto" official are also returned.
|
||
|
|
||
|
.. warning:: Note that the data is as up to date as the current version of the CLDR used
|
||
|
by Babel. If you need scientifically accurate information, use another source!
|
||
|
|
||
|
:param territory: Territory code
|
||
|
:type territory: str
|
||
|
:param regional: Whether to return regionally official languages too
|
||
|
:type regional: bool
|
||
|
:param de_facto: Whether to return de-facto official languages too
|
||
|
:type de_facto: bool
|
||
|
:return: Tuple of language codes
|
||
|
:rtype: tuple[str]
|
||
|
"""
|
||
|
|
||
|
territory = str(territory).upper()
|
||
|
allowed_stati = {"official"}
|
||
|
if regional:
|
||
|
allowed_stati.add("official_regional")
|
||
|
if de_facto:
|
||
|
allowed_stati.add("de_facto_official")
|
||
|
|
||
|
languages = get_global("territory_languages").get(territory, {})
|
||
|
pairs = [
|
||
|
(info['population_percent'], language)
|
||
|
for language, info in languages.items()
|
||
|
if info.get('official_status') in allowed_stati
|
||
|
]
|
||
|
pairs.sort(reverse=True)
|
||
|
return tuple(lang for _, lang in pairs)
|
||
|
|
||
|
|
||
|
def get_territory_language_info(territory):
|
||
|
"""
|
||
|
Get a dictionary of language information for a territory.
|
||
|
|
||
|
The dictionary is keyed by language code; the values are dicts with more information.
|
||
|
|
||
|
The following keys are currently known for the values:
|
||
|
|
||
|
* `population_percent`: The percentage of the territory's population speaking the
|
||
|
language.
|
||
|
* `official_status`: An optional string describing the officiality status of the language.
|
||
|
Known values are "official", "official_regional" and "de_facto_official".
|
||
|
|
||
|
.. warning:: Note that the data is as up to date as the current version of the CLDR used
|
||
|
by Babel. If you need scientifically accurate information, use another source!
|
||
|
|
||
|
.. note:: Note that the format of the dict returned may change between Babel versions.
|
||
|
|
||
|
See https://www.unicode.org/cldr/charts/latest/supplemental/territory_language_information.html
|
||
|
|
||
|
:param territory: Territory code
|
||
|
:type territory: str
|
||
|
:return: Language information dictionary
|
||
|
:rtype: dict[str, dict]
|
||
|
"""
|
||
|
territory = str(territory).upper()
|
||
|
return get_global("territory_languages").get(territory, {}).copy()
|