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

必要なたびに Web 経由で呼び出すのではなく、この結果をファイルに保存することをお勧めします。

このデータセットには「非公式」言語も含まれていますが、それらを含めたくない場合もあります。コード例を次に示します。

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

エスノローグをチェック

でも気をつけて…

インドに多くの公用語があります。

于 2010-07-23T19:27:17.660 に答える
-2

pycountry(真剣に)。Package Indexから取得できます。

于 2010-04-21T06:02:13.153 に答える