Конвертировать ISO 639-1 в ISO 639-2

Мне нужно взять код ISO 639-1, такой как en-GB и преобразовать его в код ISO 639-2, такой как eng,

Я просмотрел следующие библиотеки, но не нашел документированных средств для выполнения этого преобразования ни в одной из них:

Я что-то пропустил? То есть - возможно ли это с какой-либо из этих библиотек?

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

Список кодов ISO 639-2 в Википедии содержит таблицу с указанием соответствия. Поскольку это не отображение 1-1, преобразование не всегда возможно.

Вы что- то упустили - вполне возможно сделать преобразование с указанными вами библиотеками.

Встроенные языковые конвертеры (alpha2, alpha3b, alpha3t, имя, область видимости, тип и opensubtitles):

>>> language = babelfish.Language('por', 'BR')
>>> language.alpha2
'pt'
<...>
>>> babelfish.Language.fromalpha3b('fre')
<Language [fr]>
  • langcodes предназначен для различных задач - распознавания и сопоставления языков независимо от стандартов. Таким образом, вы можете извлечь все коды, связанные с вашим исходным кодом - в различной степени - но он не скажет вам, к каким стандартам они относятся.

  • pycountry похож на babelfish и покрывается другим ответом.

Другие вопросы по тегам