>我需要获取ISO 639-1代码(例如en-GB
(并将其转换为ISO 639-2代码,例如eng
。
我查看了以下库,但没有找到在其中任何一个库中执行该转换的记录方法:
- 通天鱼
- 语言代码
- 皮国家
我错过了什么吗?也就是说 - 这些库中的任何一个都可能这样做吗?
使用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
维基百科上的ISO 639-2代码列表有一个表格,指定了对应关系。由于它不是 1-1 映射,因此转换并不总是可能的。
您确实错过了一些东西 - 很有可能使用您指定的库进行转换。
- BabelFish — babelfish 0.5.1 文档:
内置语言转换器(alpha2、alpha3b、alpha3t、名称、范围、 类型和开放字幕(:
>>> language = babelfish.Language('por', 'BR') >>> language.alpha2 'pt' <...> >>> babelfish.Language.fromalpha3b('fre') <Language [fr]>
-
langcodes
是为不同的任务量身定制的 - 识别和匹配语言,而不考虑标准。因此,您可以在不同程度上提取与初始代码相关的所有代码,但它不会告诉您它们属于哪些标准。 -
pycountry
与babelfish
相似,并被另一个答案所涵盖。