-
-
Notifications
You must be signed in to change notification settings - Fork 0
Feature Transliteration
Транслитерация кириллица ↔ латиница с автонаправлением, 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→щ …)"]
| Возможность | Inflector | doctrine | symfony | morphos | intl | 🏆 Победитель |
|---|---|---|---|---|---|---|
| Кириллица → латиница | ✅ | ❌ | ❌ | ✅ | Паритет | |
| Латиница → кириллица | ✅ | ❌ | ❌ | ❌ | ✅ | Inflector, intl |
| Автонаправление | ✅ | ❌ | ❌ | ❌ | ❌ | Inflector |
| Слаги с кириллицей | ✅ | ❌ | ❌ | 🔌 | Inflector | |
| Без расширений PHP | ✅ | ✅ | ✅ | ✅ | ❌ | Паритет |
| Скорость (ru → lat) | ✅ | — | — | — | Inflector |
CloudCastle Inflector · · PHP 8.1+
GitHub · Packagist · Releases · Discussions
Email · Telegram · VK · Сетка · 💜 Поддержать проект
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)