2010-04-21 2 views

답변

0

pycountry (심각하게). Package Index에서 가져올 수 있습니다.

+1

난 그냥 설명서를 살펴했고, 그렇지 않습니다 당신이 언어 코드를 제공하고 그 언어를 사용하는 모든 국가의 목록을 얻을 수있는 것 같습니다 –

+0

다시 확인 가치가있을 수도 있습니다 - 내가 비슷한 목적 (통화)을 위해이 패키지를 사용했기 때문에 그 이유가 있습니다 * 하지만 * 나는 인터페이스를 사용할 수 없었습니다. 대신 패키지에 포함 된 5 개의 XML 데이터베이스를 직접 사용해야했습니다. – doug

+1

@ a_m0d : 직접 코드를 작성해야 할 수도 있습니다. –

3

바벨 패키지를 찾으십시오. 지원되는 각 로케일에 대한 pickle 파일이 있습니다. 모든 로케일 목록을 얻으려면 localedata 모듈의 list() 함수를 참조하십시오. 그런 다음

인도 a lot of official languages을 가지고 ... 밖으로 Ethnologue

그래도 조심 (언어, 국가) 등 등

+0

'babel.languages.get_territory_language_info()'를 사용하면 정말 쉽습니다. – Rmatt

+0

@Rmatt 6 년 후에 패키지가 얼마나 더 사용하기 쉬워 질지 놀라 울 것입니다 :-) –

+0

물론, 이것 또한 내가 당신의 답을 upvoted 한 이유입니다! 당신은 알맞은 길을 가져 왔고, 단지 새로 온 사람들을 위해 더 정확하게 만들었습니다.) – Rmatt

0

확인에 로케일을 분할하는 몇 가지 코드를 작성합니다.

12

허용되는 대답에도 불구하고, pycountry의 기본 xml 파일 중 어느 것도 언어를 국가에 매핑하는 방법이 없다는 것을 알 수 있습니다. 여기에는 언어 및 iso 코드 목록, 국가 및 iso 코드 목록, 기타 유용한 것들이 포함되어 있지만 그 목록은 포함되어 있지 않습니다.

마찬가지로 바벨 패키지는 훌륭하지만 잠시 파고 들었을 때 목록에 어떤 방법도 찾을 수 없었습니다 특정 국가의 모든 언어가 개 있습니다.

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'] 
관련 문제