Создать URL
Генератор Правила транслитерации Как сделать ЧПУ Транслит для загранпаспорта ГОСТ 7.79 ISO 9 Блог Вопросы и ответы Создать URL
Транслитерация

Библиотеки транслитерации: как проверить, что они дают нужный результат

Библиотеки вроде slugify и unidecode обрабатывают много алфавитов, и их таблицы для русских букв могут отличаться от таблицы Яндекса. Вместо догадок проще один раз прогнать набор тестовых слов.

Почему результат библиотеки может отличаться

У большинства универсальных библиотек одна таблица для множества языков. В ней «щ», «х», «ц», «й» и другие буквы могут быть записаны не так, как у Яндекса. Узнать это заранее по описанию невозможно: нужно запускать код. Исходный код готовой функции для PHP, JavaScript и Python есть в статье «Функция транслита на PHP, JavaScript и Python».

Набор слов и эталонные адреса

Эти слова охватывают буквы, в которых схемы чаще всего расходятся. Эталон — результат генератора на этом сайте.

СловоЭталон (Яндекс)
щукаshhuka
объёмobem
мылоmylo
циркcirk
хлебhleb
йогуртjogurt
Юрийyurij
ёлкаelka
эхоeho
джинсыdzhinsy
съездsezd
письмоpismo

Скрипт проверки

Подставьте вместо my_slugify функцию вашей библиотеки. Скрипт покажет слова, на которых результат расходится.

tests = {
    "щука": "shhuka",
    "объём": "obem",
    "мыло": "mylo",
    "цирк": "cirk",
    "хлеб": "hleb",
    "йогурт": "jogurt",
    "Юрий": "yurij",
    "ёлка": "elka",
    "эхо": "eho",
    "джинсы": "dzhinsy",
    "съезд": "sezd",
    "письмо": "pismo"
}

for word, expected in tests.items():
    got = my_slugify(word)
    mark = "OK" if got == expected else "XX"
    print(mark, word, got, expected)

Что делать, если результаты расходятся

  • Если расходится несколько букв — настроить таблицу библиотеки (многие позволяют задать собственную карту символов).
  • Если расходится много слов — использовать готовую функцию из статьи про PHP, JavaScript и Python.
  • Если библиотека используется в CMS — проверить, как вставлять собственную таблицу.
  • Если расхождение приемлемо — зафиксировать выбранную схему и не менять её: смена схемы ведёт к смене адресов.

Вывод

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

Типичные ошибки

  • Доверять описанию библиотеки, а не проверять результат.
  • Не фиксировать версию библиотеки в зависимостях.
  • Не повторять проверку после обновлений.
  • Проверять только простые слова без «щ», «х», «ц», «й».

Разбор заголовка по шагам

Возьмём заголовок «Щука, хлеб и цирк на ужин» и пройдём путь до адреса. Заголовок содержит «щ», «х» и «ц»: буквы, на которых библиотеки расходятся чаще всего.

Заголовок:           Щука, хлеб и цирк на ужин
Без служебных слов:  Щука, хлеб цирк ужин
Адрес целиком:       shhuka-hleb-i-cirk-na-uzhin
Адрес короче:        shhuka-hleb-cirk-uzhin

Режим «Убрать служебные слова» в генераторе делает второй шаг сам. Короткий адрес читается легче и лучше помещается в строку браузера. Ограничения по длине и другие правила составления адреса собраны в статье «Как составить ЧПУ-адрес страницы».

Памятка для редактора

Если в проекте несколько редакторов, дайте им короткую памятку. Достаточно этих правил:

  • Прогнать набор из двенадцати слов.
  • Зафиксировать версию библиотеки.
  • Повторять проверку после обновлений.

Чек-лист

  1. Прогнать набор тестовых слов через библиотеку.
  2. Сравнить результат с эталоном.
  3. Зафиксировать версию библиотеки в зависимостях.
  4. Повторять проверку после обновлений.

Частые вопросы

Почему результат библиотеки не совпадает с Яндексом?

У универсальных библиотек общая таблица для многих языков, и она может отличаться для букв «щ», «х», «ц», «й».

Какие слова проверять?

Те, где схемы расходятся: «щука», «хлеб», «цирк», «йогурт», «ёлка», «объём», «мыло».

Можно ли настроить таблицу библиотеки?

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

Как часто проверять?

При подключении библиотеки и после её обновлений.

Проверьте свои заголовки: вставьте их в генератор ЧПУ и посмотрите, как в адресе выглядят слова с этой буквой.

Читайте также