Skip to content

Feature Transliteration

github-actions[bot] edited this page Jul 15, 2026 · 1 revision

🔤 Транслитерация, слаги и форматы имён

← Возможности · Главная · Сравнение

Транслитерация кириллица ↔ латиница с автонаправлением, URL-слаги с прозрачной обработкой кириллицы, форматы имён для ORM/API и порядковые числительные по языкам.

Принцип работы

Транслитерация использует практическую схему, близкую к ГОСТ 7.79-2000 (система Б): ж → zh, х → kh, ц → ts, ч → ch, ш → sh, щ → shch, ю → yu, я → ya, ё → yo. Обратное преобразование распознаёт многобуквенные сочетания раньше однобуквенных (strtr берёт самое длинное совпадение), поэтому «shchuka» корректно возвращается в «щука». transliterate() сам выбирает направление по алфавиту текста. Слаги перед очисткой транслитерируют кириллицу — русские заголовки дают валидные URL без внешних расширений. Порядковые числительные форматируются по правилам языка: 1-й (ru), 1st (en), 1. (de), 1er/2e (fr), 1.º (es).

$i = new Inflector();

$i->toLatin('Щука и Ёж');          // 'Shchuka i Yozh'
$i->toCyrillic('zhar-ptitsa');     // 'жар-птица'
$i->transliterate('привет');       // 'privet'  (направление автоматически)
$i->slugify('Моя страница 2024');  // 'moya-stranitsa-2024'

$i->tableize('UserAccount');       // 'user_accounts'
$i->classify('user_accounts');     // 'UserAccount'

(new Inflector(Language::Russian))->ordinalize(3); // '3-й'
(new Inflector(Language::French))->ordinalize(1);  // '1er'

Плюсы

  • Оба направления транслитерации без ext-intl (ICU) — и в ~270× быстрее его.
  • Слаги «из коробки» понимают кириллицу — не нужен отдельный slugger.
  • Полный набор имён ORM: tableize/classify учитывают язык числа.
  • Порядковые числительные локализованы для всех пяти языков.

Минусы

  • Одна практическая схема транслитерации (без вариантов ISO 9, BGN/PCGN, паспортной).
  • Обратная транслитерация неоднозначных сочетаний эвристична («e» → «е», не «э»).

✅ Рекомендуется

  • URL и файловые имена из русских заголовков: slugify($title).
  • Автогенерация имён таблиц/классов в кодогенераторах и миграциях.

❌ Антипаттерны

  • Транслитерация для официальных документов (паспортная схема отличается).
  • Ожидание идеального round-trip для слов с «е/э», «й/и» — схема практическая.

Схема автонаправления

flowchart TD
    T["текст"] --> K{"есть кириллица?"}
    K -->|да| L["toLatin: strtr по схеме (щ→shch …)"]
    K -->|нет| C["toCyrillic: длинные сочетания первыми (shch→щ …)"]
Loading

Сравнение с аналогами

Возможность Inflector doctrine symfony morphos intl 🏆 Победитель
Кириллица → латиница ⚠️ Паритет
Латиница → кириллица Inflector, intl
Автонаправление Inflector
Слаги с кириллицей ⚠️ 🔌 Inflector
Без расширений PHP Паритет
Скорость (ru → lat) ⚠️ (~270× медленнее) Inflector

Clone this wiki locally