- PVSM.RU - https://www.pvsm.ru -

Юлия → Iuliia. Всё о транслитерации

Транслитерация

Транслитерация — это запись кириллических слов латиницей (Анна → Anna, Самара → Samara). Её используют в загранпаспортах, водительских удостоверениях, трансграничной доставке, библиотечных каталогах и множестве других международных процессов.

Так вышло, что я недавно окунулся в эту тему, а в Википедии она раскрыта слабо. Поэтому расскажу, что к чему (спойлер — если вы думаете, что с транслитерацией всё плохо, то на самом деле всё ещё хуже).

И конечно, поскольку это Хабр — предложу open-source библиотеки для решения проблемы.

Оглавление:

Кто виноват

Транслит — это хрестоматийная ситуация «у нас 14 плохих стандартов, давайте придумаем ещё один». Весь 20 век солидные, уважаемые люди придумывали всё новые и новые стандарты транслитерации.

Как приумножаются стандарты
Как приумножаются стандарты // xkcd [5]

Получалось у них очень, очень плохо. Например, в загранпаспорте пишут Юлия → Iuliia не потому, что МИД хочет сделать вам больно, а потому что это международный стандарт ICAO Doc 9303 [1] [6] — Machine Readable Travel Documents.

Такое ощущение, что все стандарты писались людьми, которые ненавидят русский язык. Если для англо-американского творчества это объяснимо, то что заставило советских учёных превратить Лёгкий в Ljogkijj (ГОСТ 16876-71[2] [7]) — решительно непонятно.

Zato naši kosmičeskie korabli borozdili prostory vselennoj.

В 21 веке человечество оказалось с двумя наиболее распространёнными стандартами: ICO Doc 9303 (Юлия → Iuliia) и ISO 9:1995 (Юлия → Ûliâ), он же отечественный ГОСТ 7.79-2000[3] [8]. Достойный результат для столетних усилий, ничего не скажешь.

Посмотрев на эту «красоту», ребята из Википедии взялись за голову и сделали нормальную схему транслитерации[4] [9], благодаря которой у несчастной Юлии остаётся слабый шанс быть Yuliya. Международные и отечественные институты эту работу проигнорировали, к сожалению.

Yuliya, syesh yeshchyo etikh myagkikh frantsuzskikh bulok iz Yoshkar-Oly, da vypey altayskogo chayu.

Конечно, нельзя было делать совсем уж хорошо (а то кто тогда станет придумывать новые стандарты). Поэтому у Википедии ещё превращается в yeshchyo. Схема хорошо передаёт фонетику, а вот выглядит иногда не очень — оцените E → YE, Щ → SHCH и Ё → YO в этом примере.

Не остался в стороне и Яндекс. У него две схемы — отдельно для ФИО[5] [10], отдельно для адресов[6] [11]. Здесь наконец-то сделали Щ → SCH. Но Юрий → Yurii, а Усолье → Usole, что понравится не всем. Не забываем оставлять пространство для новых стандартов!

И Студия Лебедева туда же (в рунете ничего без неё не обходится). Когда дизайнили схему московского метро, ребята отвергли стандарт ISO, а прочие, похоже, даже не смотрели. Ну и придумали свой вариант — Мосметро[7] [12].

Чтобы вы представляли масштаб бедствия. Я насчитал 20 схем транслитерации, некоторые из которых предусматривают альтернативные наборы правил (например, с диакритикой и без). Из них 14 считаются действующими. Четырнадцать действующих «стандартов», прямо как в комиксе xkcd.

Кстати, на Хабре тоже есть транслитерация — например, для генерации id заголовков из текста. И угадайте что? Ну да: она не следует ни одному из официальных стандартов.
Habr, chto ty delaesh, ahaha, prekrati

В качестве вишенки на торте в рунете несметное количество сервисов типа «транслитерация онлайн», которые мало того что перевирают существующие схемы, так ещё и придумывают собственные. Исходники у них закрыты, разумеется.

Есть ещё такая штука — «обратная транслитерация», когда вы восстанавливаете справедливость и превращаете Iuliia → Юлия. Тут ситуация даже хуже, чем в прямой транслитерации, потому что при записи латиницей никто никаких стандартов не соблюдает, и встречаются жуткие монстры.

Обратная транслитерация — отдельная большая тема, здесь я её не рассматриваю. Но есть отличная статья DaryaRodionova [13] — «Как написать свой транслитератор»[8] [14].

Теперь несколько практических рекомендаций.

Как выбрать схему (быстрый вариант)

Загранпаспорт или в/у. По умолчанию используйте ICAO Doc 9303 — это требование закона. Впрочем, есть лайфхак: если написать отдельное заявление при подаче документов, сделают паспорт с нормальной транслитерацией. Тогда подойдёт старый стандарт МВД-310[9] [15] или Мосметро.

import iuliia

source = "Юлия Щеглова"
iuliia.translate(source, schema=iuliia.ICAO_DOC_9303)
# Iuliia Shcheglova

Если нужно обратимое преобразование (cyr–lat). Используйте ГОСТ 7.79-2000 (aka ISO 9:1995). Там есть вариант с диакритикой и без.

import iuliia

source = "Юлия, съешь ещё этих мягких французских булок из Йошкар-Олы"

iuliia.translate(source, schema=iuliia.GOST_779)
# Ûliâ, sʺešʹ eŝё ètih mâgkih francuzskih bulok iz Joškar-Oly

iuliia.translate(source, schema=iuliia.GOST_779_ALT)
# Yuliya, s``esh` eshhyo е`tix myagkix franczuzskix bulok iz Joshkar-Oly`

Если визуальная красота превыше всего. Используйте схему Мосметро, она сама лаконичная и приятная на вид.

import iuliia

source = "Юлия Щеглова"
iuliia.translate(source, schema=iuliia.MOSMETRO)
# Yuliya Scheglova

В остальных случаях. Используйте схему Википедии. Она лучше всех по фонетике и лишь немного уступает Мосметро визуально.

import iuliia

source = "Россия, город Йошкар-Ола, улица Яна Крастыня"
iuliia.translate(source, schema=iuliia.WIKIPEDIA)
# Rossiya, gorod Yoshkar-Ola, ulitsa Yana Krastynya

Как выбрать схему (для дотошных)

Чтобы не раздувать статью до неприличия, я сделал страницу со всеми схемами [10] [16]. Там и сценарии использования, и фильтры, и подробные описания, и примеры. Читайте, выбирайте, что больше нравится. Все схемы уже реализованы на JavaScript, Python и Go, подключить библиотеку — минутное дело.

Здесь же перечислю вкратце только актуальные схемы с моими комментариями.

ГОСТ 7.79-2000

Универсальная схема транслитерации, международный стандарт ISO 9:1995. Громоздкая, зато обратимая. Есть вариант с диакритикой.

Юлия, съешь ещё этих мягких французских булок из Йошкар-Олы,
да выпей алтайского чаю
↓ ↓ ↓
Ûliâ, sʺešʹ eŝё ètih mâgkih francuzskih bulok iz Joškar-Oly,
da vypej altajskogo čaû
или
Yuliya, s``esh` eshhyo е`tix myagkix franczuzskix bulok iz Joshkar-Oly`,
da vy`pej altajskogo chayu

ГОСТ Р 52290-2004

Стандарт для транслитерации имён собственных на дорожных знаках. Неплохая, с одинарными апострофами. Много внимания написанию Е и Ё.

Юлия, съешь ещё этих мягких французских булок из Йошкар-Олы,
да выпей алтайского чаю
↓ ↓ ↓
Yuliya, syesh' eshche etikh myagkikh frantsuzskikh bulok iz Yoshkar-Oly,
da vypey altayskogo chayu

ГОСТ Р 7.0.34-2014

Правила упрощенной транслитерации русского письма латинским алфавитом. Для библиотек и издательств. В меру приятная. Расслабленная: есть альтернативы для многих букв, можно без апострофов.

Юлия, съешь ещё этих мягких французских булок из Йошкар-Олы,
да выпей алтайского чаю
↓ ↓ ↓
Yuliya, s''esh' eshhyo etix myagkix francuzskix bulok iz Joshkar-Oly,
da vypej altajskogo chayu
или
Yuliya, sesh eshhyo etikh myagkikh francuzskikh bulok iz Yoshkar-Oly,
da vypey altayskogo chayu

Телеграммы

Инструкция Минсвязи о порядке обработки международных телеграмм. Некрасивая, зато без апострофов.

Юлия, съешь ещё этих мягких французских булок из Йошкар-Олы,
да выпей алтайского чаю
↓ ↓ ↓
Iuliia, sesh esce etih miagkih francuzskih bulok iz Ioshkar-Oly,
da vypei altaiskogo chaiu

ICAO DOC 9303

Стандарт Международной организации гражданской авиации. Используется МВД для ФИО в водительских удостоверениях, а МИД — в загранпаспортах. Подходит для гринкарты и вида на жительство. Используется некоторыми платёжными системами.

Юлия, съешь ещё этих мягких французских булок из Йошкар-Олы,
да выпей алтайского чаю
↓ ↓ ↓
Iuliia, sieesh eshche etikh miagkikh frantsuzskikh bulok iz Ioshkar-Oly,
da vypei altaiskogo chaiu

UNGEGN 1987 V/18

Схема транслитерации ООН для географических названий. Основана на ГОСТ 16876-71. Такая же страшная, но до сих пор не отменена.

Юлия, съешь ещё этих мягких французских булок из Йошкар-Олы,
да выпей алтайского чаю
↓ ↓ ↓
Julija, sʺešʹ eščё ètih mjagkih francuzskih bulok iz Joškar-Oly,
da vypej altajskogo čaju

BGN/PCGN

Древняя схема транслитерации ООН для географических названий. Почти без диакритики, но зачем-то оставила Ё с точками.

Юлия, съешь ещё этих мягких французских булок из Йошкар-Олы,
да выпей алтайского чаю
↓ ↓ ↓
Yuliya, s”yesh’ yeshchё etikh myagkikh frantsuzskikh bulok iz Yoshkar-Oly,
da vypey altayskogo chayu

ALA-LC

Схема транслитерации американской Библиотеки Конгресса. Страшноватая. Есть варианты с диакритикой и без.

Юлия, съешь ещё этих мягких французских булок из Йошкар-Олы,
да выпей алтайского чаю
↓ ↓ ↓
I͡ulii͡a, sʺeshʹ eshchё ėtikh mi͡agkikh frant͡suzskikh bulok iz Ĭoshkar-Oly,
da vypeĭ altaĭskogo chai͡u
или
Iuliia, s"esh' eshche etikh miagkikh frantsuzskikh bulok iz Ioshkar-Oly,
da vypei altaiskogo chaiu

BS 2979:1958

Схема транслитерации Британской библиотеки. Используется издательством Oxford University Press. Изящно схлопывает окончания ИЙ и ЫЙ, в остальном так себе.

Юлия, съешь ещё этих мягких французских булок из Йошкар-Олы,
да выпей алтайского чаю
↓ ↓ ↓
Yuliya, sʺeshʹ eshchё étikh myagkikh frantsuzskikh bulok iz Ĭoshkar-Olȳ,
da vȳpeĭ altaĭskogo chayu
или
Yuliya, s"esh' eshche etikh myagkikh frantsuzskikh bulok iz Ioshkar-Oly,
da vypei altaiskogo chayu

Научная

Великая праматерь всех схем. Используется в научных работах. Из неё вырос ГОСТ 16876-71. Достойна уважения за вклад в историю, но страшная.

Юлия, съешь ещё этих мягких французских булок из Йошкар-Олы,
да выпей алтайского чаю
↓ ↓ ↓
Julija, sʺešʹ eščё ètix mjagkix francuzskix bulok iz Joškar-Oly,
da vypej altajskogo čaju

Википедия

Схема транслитерации, которую использует Википедия. Сделана на основе BGN/PCGN со значительными модификациями. Самая продуманная, звучит лучше всех и выглядит приятнее большинства прочих схем.

Юлия, съешь ещё этих мягких французских булок из Йошкар-Олы,
да выпей алтайского чаю
↓ ↓ ↓
Yuliya, syesh yeshchyo etikh myagkikh frantsuzskikh bulok iz Yoshkar-Oly,
da vypey altayskogo chayu

Мосметро

Схема транслитерации, которую использует Московский метрополитен. Визуально самая приятная из всех, хотя уступает Википедии по фонетической точности. Придумана в Студии Лебедева, официально нигде не описана.

Юлия, съешь ещё этих мягких французских булок из Йошкар-Олы,
да выпей алтайского чаю
↓ ↓ ↓
Yuliya, syesh esche etikh myagkikh frantsuzskikh bulok iz Yoshkar-Oly,
da vypey altayskogo chayu

Яндекс.Деньги

Правила Яндекса для банковских карт. Простая и удобная схема.

Юлия, съешь ещё этих мягких французских булок из Йошкар-Олы,
да выпей алтайского чаю
↓ ↓ ↓
Yuliya, sesh esche etikh myagkikh frantsuzskikh bulok iz Ioshkar-Oly,
da vypei altaiskogo chayu

Яндекс.Карты

Правила Яндекса для адресов. Слегка улучшенная версия Яндекс.Денег.

Юлия, съешь ещё этих мягких французских булок из Йошкар-Олы,
да выпей алтайского чаю
↓ ↓ ↓
Yuliya, syesh eschyo etikh myagkikh frantsuzskikh bulok iz Yoshkar-Oly,
da vypey altayskogo chayu

Как транслитерировать

Не пишите логику транслитерации с нуля — велик шанс ошибиться и получить очередную (N+1) схему транслитерации, «спасибо» за которую вам не скажут.

Не берите библиотеки с гитхаба без проверки. Все, что я смотрел — реализуют стандарт некорректно, если он чуть сложнее таблицы с однозначным соответствием.

Мы с mehanizm [17] сделали аккуратные библиотеки с нормальными тестами для Python [18], JavaScript [19] и Go [20]. Но лучше дополнительно проверьте на паре примеров, а то вы ведь знаете этих программистов ツ

Пример использования (Python):

import iuliia

# list all supported schemas
for schema_name in iuliia.Schemas.names():
    print(schema_name)

# transliterate using specified schema
source = "Юлия Щеглова"
iuliia.translate(source, schema=iuliia.ICAO_DOC_9303)
# "Iuliia Shcheglova"

# or pick schema by name
schema = iuliia.Schemas.get("wikipedia")
iuliia.translate(source, schema)
# "Yuliya Shcheglova"

Или Go:

import iuliia "github.com/mehanizm/iuliia-go"

func main() {
    translated, err := iuliia.Wikipedia.Translate("Юлия Щеглова")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(translated)
}

>> 'Yuliya Shcheglova'

Схемы транслитерации описаны декларативно в JSON, лежат в отдельном репозитории [21]. Если я какую-то пропустил — вы знаете, что делать ツ

И поделитесь в комментариях — приходилось вам сталкиваться с транслитерацией по работе или в жизни? Какие впечатления?


Ссылки по тексту:

  1. ICAO Doc 9303 [22]
  2. ГОСТ 16876-71 [23]
  3. ГОСТ 7.79-2000, он же ISO 9:1995 [24]
  4. Схема Википедии [25]
  5. Схема Яндекс.Денег [26]
  6. Схема Яндекс.Карт [27]
  7. Схема Мосметро [28]
  8. Как написать свой транслитератор [29]
  9. МВД 310 [30]
  10. Полное руководство по транслитерации [31]

Автор: Антон Жиянов

Источник [32]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/interfejsy/352575

Ссылки в тексте:

[1] Кто виноват: #kto-vinovat

[2] Как выбрать схему (быстрый вариант): #kak-vybrat-shemu-bystryy-variant

[3] Как выбрать схему (для дотошных): #kak-vybrat-shemu-dlya-dotoshnyh

[4] Как транслитерировать: #kak-transliterirovat

[5] xkcd: https://xkcd.com/927/

[6] [1]: #ft-icao-doc-9303

[7] [2]: #ft-gost-16876

[8] [3]: #ft-gost-779

[9] [4]: #ft-wikipedia

[10] [5]: #ft-yandex-money

[11] [6]: #ft-yandex-maps

[12] [7]: #ft-mosmetro

[13] DaryaRodionova: https://habr.com/ru/users/daryarodionova/

[14] [8]: #ft-lat2cyr

[15] [9]: #ft-mvd-310

[16] [10]: #ft-iuliia

[17] mehanizm: https://habr.com/ru/users/mehanizm/

[18] Python: https://github.com/nalgeon/iuliia-py

[19] JavaScript: https://github.com/nalgeon/iuliia-js

[20] Go: https://github.com/mehanizm/iuliia-go

[21] в отдельном репозитории: https://github.com/nalgeon/iuliia

[22] ICAO Doc 9303: https://dangry.ru/iuliia/icao-doc-9303/

[23] ГОСТ 16876-71: https://dangry.ru/iuliia/gost-16876/

[24] ГОСТ 7.79-2000, он же ISO 9:1995: https://dangry.ru/iuliia/gost-779/

[25] Схема Википедии: https://dangry.ru/iuliia/wikipedia/

[26] Схема Яндекс.Денег: https://dangry.ru/iuliia/yandex-money/

[27] Схема Яндекс.Карт: https://dangry.ru/iuliia/yandex-maps/

[28] Схема Мосметро: https://dangry.ru/iuliia/mosmetro/

[29] Как написать свой транслитератор: https://habr.com/ru/company/JetBrains-education/blog/479542/

[30] МВД 310: https://dangry.ru/iuliia/mvd-310/

[31] Полное руководство по транслитерации: https://dangry.ru/iuliia/

[32] Источник: https://habr.com/ru/post/499574/?utm_source=habrahabr&utm_medium=rss&utm_campaign=499574