-
-
Notifications
You must be signed in to change notification settings - Fork 0
Feature Languages
Пять языков в одном пакете: русский, английский, немецкий, французский, испанский. Язык задаётся в конструкторе либо определяется автоматически по каждому слову.
Каждый язык — реализация контракта LanguageRulesInterface (число, склонение,
спряжение, счётная форма) поверх базового движка AbstractRules: неисчисляемое
слово → как есть; нерегулярная пара → по словарю; иначе — первое совпавшее
регулярное правило. Автоопределение — каскад признаков: кириллица → русский;
уникальная диакритика (ß/ä/ö/ü → немецкий, ñ/¿/á → испанский, ç/œ/à → французский);
для чистой латиницы — частотные служебные слова; по умолчанию — английский.
use CloudCastle\Inflector\Inflector;
use CloudCastle\Inflector\Language;
// Авто-режим: язык определяется по каждому слову
$auto = new Inflector();
$auto->pluralize('стол'); // 'столы' (русский)
$auto->pluralize('category'); // 'categories' (английский)
$auto->singularize('Bücher'); // 'Buch' (немецкий — по умлауту)
// Фиксированный язык — быстрее (без детекта) и предсказуемее
$ru = new Inflector(Language::Russian);
$auto->detectLanguage('mañana'); // Language::Spanish- Один пакет и один API вместо пяти языковых библиотек.
- Авто-режим удобен для смешанного контента (CMS, каталоги, UGC).
- Фиксированный язык убирает детект с горячего пути (O(1) выбор правил).
- Новый язык добавляется реализацией одного интерфейса.
- Детект по одному короткому слову без диакритики (латиница) возвращает английский — для точности задавайте язык явно.
- Пять языков «из коробки»; другие языки — через собственную реализацию контракта.
- Задавать язык в конструкторе везде, где он известен:
new Inflector(Language::Russian). - Авто-режим — для потоков смешанного контента, где язык слова неизвестен заранее.
- Детект языка по одиночным аббревиатурам/кодам («SKU», «ID») — латиница без контекста считается английской.
- Создание нового инфлектора в цикле — кэши живут в экземпляре, переиспользуйте его.
flowchart TD
T["текст"] --> C{"кириллица?"}
C -->|да| RU[Russian]
C -->|нет| D{"ß / ä / ö / ü?"}
D -->|да| DE[German]
D -->|нет| S{"ñ / ¿ / á / í / ó / ú?"}
S -->|да| ES[Spanish]
S -->|нет| F{"ç / œ / à / ê …?"}
F -->|да| FR[French]
F -->|нет| W{"стоп-слова?"}
W -->|большинство голосов| LANG["язык большинства"]
W -->|нет| EN[English]
| Возможность | Inflector | doctrine | symfony | morphos | intl | 🏆 Победитель |
|---|---|---|---|---|---|---|
| Языков поддерживается | 5 | 1 | 2 | 2 | — | Inflector |
| Авто-определение языка | ✅ | ❌ | ❌ | ❌ | ❌ | Inflector |
| Контракт для новых языков | ✅ | ❌ | ❌ | Inflector |
CloudCastle Inflector · · PHP 8.1+
GitHub · Packagist · Releases · Discussions
Email · Telegram · VK · Сетка · 💜 Поддержать проект
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)