将 ISO 639-1 转换为 ISO 639-2



>我需要获取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是为不同的任务量身定制的 - 识别和匹配语言,而不考虑标准。因此,您可以在不同程度上提取与初始代码相关的所有代码,但它不会告诉您它们属于哪些标准。

  • pycountrybabelfish相似,并被另一个答案所涵盖。

最新更新