Сопоставьте код языка со странами, где этот язык является официальным или широко используемым языком - PullRequest
6 голосов
/ 21 апреля 2010

Существует ли какая-либо библиотека python для получения списка стран для конкретного кода языка, где он является официальным или обычно используемым языком?

Например, код языка «fr» ассоциируется с 29 странами, где французский является официальным языком, и с 8 странами, где он обычно используется.

Ответы [ 4 ]

14 голосов
/ 05 марта 2014

Несмотря на принятый ответ, насколько я могу судить, ни один из XML-файлов, лежащих в основе pycountry, не содержит способа сопоставления языков странам. Он содержит списки языков и их ISO-коды, а также списки стран и их ISO-кодов, а также другие полезные материалы, но не это.

Точно так же пакет Babel великолепен, но покопавшись некоторое время, я не смог найти способ перечислить все языки для конкретной страны. Лучшее, что вы можете сделать, это «наиболее вероятный» язык: https://stackoverflow.com/a/22199367/202168

Так что я должен был получить это сам ...

def get_territory_languages():
    import lxml
    import urllib

    langxml = urllib.urlopen('http://unicode.org/repos/cldr/trunk/common/supplemental/supplementalData.xml')
    langtree = lxml.etree.XML(langxml.read())

    territory_languages = {}
    for t in langtree.find('territoryInfo').findall('territory'):
        langs = {}
        for l in t.findall('languagePopulation'):
            langs[l.get('type')] = {
                'percent': float(l.get('populationPercent')),
                'official': bool(l.get('officialStatus'))
            }
        territory_languages[t.get('type')] = langs
    return territory_languages

Вы, вероятно, хотите сохранить результат этого в файле, а не звонить через Интернет каждый раз, когда вам это нужно.

Этот набор данных также содержит "неофициальные" языки, вы можете их не включать, вот еще пример кода:

TERRITORY_LANGUAGES = get_territory_languages()

def get_official_locale_ids(country_code):
    country_code = country_code.upper()
    langs = TERRITORY_LANGUAGES[country_code].items()
    # most widely-spoken first:
    langs.sort(key=lambda l: l[1]['percent'], reverse=True)
    return [
        '{lang}_{terr}'.format(lang=lang, terr=country_code)
        for lang, spec in langs if spec['official']
    ]

get_official_locale_ids('es')
>>> ['es_ES', 'ca_ES', 'gl_ES', 'eu_ES', 'ast_ES']
5 голосов
/ 06 июня 2010

Ищите пакет Babel. Он имеет файл pickle для каждой поддерживаемой локали. См. Функцию list () в модуле localedata для получения списка ВСЕХ локалей. Затем напишите некоторый код для разделения локалей на (язык, страну) и т. Д. И т. Д.

0 голосов
/ 23 июля 2010

Выезд Этнолог

Будьте осторожны, хотя ...

В Индии много официальных языков .

0 голосов
/ 21 апреля 2010

пикантри (серьезно). Вы можете получить его из Указатель пакетов .

...