我需要將ISO 639-1 code(如en-GB
)轉換爲ISO 639-2 code(如eng
)。將ISO 639-1轉換爲ISO 639-2
我已經看過下面的庫,但沒有找到記錄手段,在其中任何一個進行這種轉變:
有我錯過了什麼?這是 - 這是可能的任何這些庫?
我需要將ISO 639-1 code(如en-GB
)轉換爲ISO 639-2 code(如eng
)。將ISO 639-1轉換爲ISO 639-2
我已經看過下面的庫,但沒有找到記錄手段,在其中任何一個進行這種轉變:
有我錯過了什麼?這是 - 這是可能的任何這些庫?
你可以使用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
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任務 - 無論標準如何,都能識別和匹配語言。因此,您可以提取與最初的代碼相關的所有代碼 - 不同的程度 - 但它不會告訴您它們與哪些標準相關。
pycountry
與babelfish
類似,涵蓋在the other answer。
謝謝!是的,我確實錯過了一些東西。我的評論[這裏](https://stackoverflow.com/questions/34302586/convert-iso-639-1-to-iso-639-2#comment56366849_34302890)解釋了它是什麼。 – sampablokuper
@sampablokuper嗯,我確實想念你的混亂部分 - 因爲我從來沒有把它放在第一位(維基百科表列出了兩個字母的代碼 - 它是兩個字母的代碼!)。 –
ivan_pozdeev,對!取決於哪個維基百科表進行諮詢,但:)對不起,我的困惑是困惑; – sampablokuper
謝謝,這是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
'code [:code.index(' - ')]'似乎對提取第一部分更加可靠(所以如果代碼不是2個字母,代碼將會窒息)。如果只有一個部分,它將不起作用。就像'code [:code.index(' - ')] if' - 'in code else code' will be working in all cases。 –
@ivan_pozdeev - 謝謝你,我已經更新了我的代碼以包含該行。 – birryree