Конвертировать 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
и покрывается другим ответом.