8

是否有任何 python 库可以获取特定语言代码的国家列表,其中它是官方或常用语言?

例如,语言代码“fr”与 29 个以法语为官方语言的国家以及 8 个常用法语的国家相关联。

4

5 回答 5

18

尽管答案已被接受,但据我所知,pycountry 底层的任何 xml 文件都不包含将语言映射到国家/地区的方法。它包含语言列表及其 iso 代码,国家列表及其 iso 代码,以及其他有用的东西,但并非如此。

同样,Babel 包也很棒,但是经过一段时间的研究,我找不到任何方法来列出特定国家/地区的所有语言。你能做的最好的就是“最有可能”的语言:https ://stackoverflow.com/a/22199367/202168

所以我只好自己拿了...

import lxml.etree
import urllib.request

def get_territory_languages():
    url = "https://raw.githubusercontent.com/unicode-org/cldr/master/common/supplemental/supplementalData.xml"
    langxml = urllib.request.urlopen(url)
    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']
于 2014-03-05T15:59:18.130 回答
8

寻找 Babel 包。对于每个支持的语言环境,它都有一个 pickle 文件。请参阅 localedata 模块中的 list() 函数以获取所有语言环境的列表。然后编写一些代码将语言环境拆分为(语言,国家)等

于 2010-06-05T23:38:01.173 回答
1

根据@NoahSantacruz 的要求,我将其添加为单独的答案,以便更容易获取。至少自 2017 年以来,最简单的方法是:

babel.languages.get_territory_language_info()

请参阅文档http://babel.pocoo.org/en/latest/api/languages.html#babel.languages.get_territory_language_info

于 2021-06-11T11:42:56.273 回答
-1

看看民族志

不过要小心...

印度有很多官方语言

于 2010-07-23T19:27:17.660 回答
-2

pycountry(严重)。您可以从Package Index获取它。

于 2010-04-21T06:02:13.153 回答