2010-04-21 18 views

Répondre

0

pycountry (sérieusement). Vous pouvez l'obtenir à partir du Package Index.

+1

Je viens d'avoir un coup d'œil à la documentation, et elle ne présente pas semble que vous pouvez fournir un code de langue, et obtenir une liste de tous les pays qui utilisent cette langue –

+0

pourrait être utile de vérifier à nouveau - la raison pour laquelle je dis cela parce que j'ai utilisé ce paquet dans un but similaire (devises) - * mais * je n'étais pas capable d'utiliser l'interface. Au lieu de cela j'ai dû travailler directement avec les cinq bases de données XML fournies dans le paquet. – doug

+1

@ a_m0d: Vous devrez peut-être écrire du code vous-même. –

3

Recherchez l'emballage Babel. Il dispose d'un fichier pickle pour chaque paramètre régional pris en charge. Voir la fonction list() dans le module localedata pour obtenir une liste de toutes les locales. Ensuite, écrire un code pour diviser les lieux en (langue, pays) etc etc

+0

C'est très facile d'utiliser 'babel.languages.get_territory_language_info()' – Rmatt

+0

@Rmatt C'est incroyable à quel point un paquet peut devenir plus facile à utiliser dans six ans :-) –

+0

Bien sûr, c'est pourquoi j'ai aussi voté pour votre réponse! Vous avez apporté un chemin décent, juste fait plus précis pour les nouveaux arrivants;) – Rmatt

12

En dépit de la réponse acceptée, autant que je sache, aucun des fichiers XML sous-jacents à pycountry ne contient un moyen de mapper les langues vers les pays. Il contient des listes de langues et de leurs codes iso, et des listes de pays et de leurs codes iso, ainsi que d'autres choses utiles, mais pas cela.

De même, le paquet Babel est génial, mais après avoir creusé pendant un moment, je ne pouvais trouver aucun moyen de lister toutes les langues pour un pays particulier. Le mieux que vous pouvez faire est le « plus probable » la langue: https://stackoverflow.com/a/22199367/202168

J'ai donc dû chercher moi-même ...

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 

Vous voulez probablement stocker le résultat de ceci dans un fichier plutôt que d'appeler à travers le web chaque fois que vous en avez besoin.

Cet ensemble de données contient des langues « non officielles » et, vous voudrez peut-être de ne pas inclure ceux-ci, voici un peu plus un exemple de code:

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']