2015-12-16 40 views

回答

4

你可以使用pycountry爲你想要的。請注意,如果您需要反向場景(ISO 639-2到ISO 639-1),它可能並不總是有效,因爲雖然應始終存在從ISO 639-1語言代碼到ISO 639-2的映射,反之亦然不保證。

import pycountry 

code = 'en-GB' 

# ISO 639-1 codes are always 2-letter codes, so you have to take 
# the first two characters of the code 

# This is a safer way to extract the country code from something 
# like en-GB (thanks ivan_pozdeev) 
lang_code = code[:code.index('-')] if '-' in code else code 

lang = pycountry.languages.get(iso639_1_code=lang_code) 
print("ISO 639-1 code: " + lang.iso639_1_code) 
print("ISO 639-2 code: " + lang.iso639_2T_code) 
print("ISO 639-3 code: " + lang.iso639_3_code) 

上面應該打印出來:

ISO 639-1 code: en 
ISO 639-2 code: eng 
ISO 639-3 code: eng 
+0

謝謝,這是v.helpful。 [我鏈接的維基百科文章](https://en.wikipedia.org/w/index.php?title = Language_localisation&oldid = 685931772#Language_tags_and_codes)讓我感到困惑:即使它的措辭談到了ISO 639-1「alpha-2代碼」和「雙字母代碼」,該表格顯示了字符串「en-GB」的「ISO 639-1代碼」,這讓我認爲整個字符串是一個有效的ISO 639-1代碼,而不僅僅是字符串的前兩個字母。這反過來又是爲什麼我認爲我列出的圖書館可能無法執行我所需要的轉換。現在閱讀BCP 47! – sampablokuper

+0

'code [:code.index(' - ')]'似乎對提取第一部分更加可靠(所以如果代碼不是2個字母,代碼將會窒息)。如果只有一個部分,它將不起作用。就像'code [:code.index(' - ')] if' - 'in code else code' will be working in all cases。 –

+0

@ivan_pozdeev - 謝謝你,我已經更新了我的代碼以包含該行。 – birryree

1

List of ISO 639-2 codes at Wikipedia有一個表格指定對應關係。由於它不是1-1映射,轉換並不總是可能的。

確實錯過了一些東西 - 這是完全有可能與你指定的庫進行轉換。

內置語言轉換器(α-2,alpha3b,alpha3t,名稱,範圍 類型和opensubtitles):

>>> language = babelfish.Language('por', 'BR') 
>>> language.alpha2 
'pt' 
<...> 
>>> babelfish.Language.fromalpha3b('fre') 
<Language [fr]> 
  • langcodes是爲不同的量身定做的nt任務 - 無論標準如何,都能識別和匹配語言。因此,您可以提取與最初的代碼相關的所有代碼 - 不同的程度 - 但它不會告訴您它們與哪些標準相關。

  • pycountrybabelfish類似,涵蓋在the other answer

+0

謝謝!是的,我確實錯過了一些東西。我的評論[這裏](https://stackoverflow.com/questions/34302586/convert-iso-639-1-to-iso-639-2#comment56366849_34302890)解釋了它是什麼。 – sampablokuper

+0

@sampablokuper嗯,我確實想念你的混亂部分 - 因爲我從來沒有把它放在第一位(維基百科表列出了兩個字母的代碼 - 它是兩個字母的代碼!)。 –

+0

ivan_pozdeev,對!取決於哪個維基百科表進行諮詢,但:)對不起,我的困惑是困惑; – sampablokuper