phpsoftbox/inflector
Composer 安装命令:
composer require phpsoftbox/inflector
包简介
Inflector (pluralize/singularize) for the PhpSoftBox framework
README 文档
README
phpsoftbox/inflector — компонент для преобразования слов между единственным и множественным числом.
Компонент вдохновлён Doctrine Inflector, но реализован в более лёгком и прагматичном виде, чтобы:
- не тянуть лишние зависимости,
- иметь предсказуемую архитектуру под мульти-языковые ruleset'ы,
- оставаться удобным для использования в ORM/DBAL.
Установка
composer require phpsoftbox/inflector
Быстрый старт
use PhpSoftBox\Inflector\InflectorFactory; use PhpSoftBox\Inflector\LanguageEnum; $inflector = InflectorFactory::create(LanguageEnum::EN); echo $inflector->pluralize('post'); // posts echo $inflector->singularize('posts'); // post
Дополнительные методы (конвенции/ORM)
Инфлектор также содержит небольшой набор утилит, часто полезных в ORM и соглашениях по именованию:
$inflector->tableize('BlogPost'); // blog_post $inflector->classify('blog_post'); // BlogPost $inflector->camelize('blog_post'); // blogPost $inflector->capitalize('top-o-the-morning to all_of_you!'); // Top-O-The-Morning To All_of_you! $inflector->urlize('My first blog post'); // my-first-blog-post
Поддержка языков
Язык выбирается через LanguageEnum.
Сейчас реализованы:
ENRU(базовый набор rules для частых доменных слов)
$inflector = InflectorFactory::create(LanguageEnum::EN); $ruInflector = InflectorFactory::create(LanguageEnum::RU);
Пример RU:
use PhpSoftBox\Inflector\InflectorFactory; use PhpSoftBox\Inflector\LanguageEnum; $inflector = InflectorFactory::create(LanguageEnum::RU); echo $inflector->pluralize('миграция'); // миграции echo $inflector->singularize('товары'); // товар echo $inflector->pluralizeByCount(21, 'миграцию', 'миграции', 'миграций'); // миграцию
Склонение ФИО
В языках, где поддерживается склонение имён (сейчас RU), доступны:
getNameCases(string $fullName, ?string $gender = null): arraygetNameCase(string $fullName, string $case, ?string $gender = null): stringdetectNameGender(string $fullName): ?string
Для EN используется заглушка: имя возвращается без изменений, пол null.
use PhpSoftBox\Inflector\Names\Cases; $ru = InflectorFactory::create(LanguageEnum::RU); $en = InflectorFactory::create(LanguageEnum::EN); echo $ru->getNameCase('Иванов Иван Иванович', Cases::GENITIVE->value); // Иванова Ивана Ивановича $allCases = $ru->getNameCases('Иванова Анна Ивановна'); $gender = $ru->detectNameGender('Иванова Анна Ивановна'); // f echo $en->getNameCase('John Doe', Cases::GENITIVE->value); // John Doe
Как устроены правила (rules)
Структура rules-слоя похожа на Doctrine Inflector:
Pattern— паттерн (может быть регуляркой/.../или строкой/regex-фрагментом).Transformation— правило замены по совпадениюPattern.Substitution+Word— "неправильные" формы (irregular).Ruleset— объединяет:Transformations(regular)Patterns(uninflected)Substitutions(irregular)
Пример: английские правила располагаются в src/Rules/En:
Inflectable— склоняемые правила (plural/singular + irregular)Uninflected— слова/паттерны, которые не склоняютсяRules— сборка двух ruleset'ов (plural/singular)
Примеры
Irregular
$inflector = InflectorFactory::create(LanguageEnum::EN); echo $inflector->pluralize('person'); // people echo $inflector->singularize('people'); // person
Uninflected + regex
Uninflected можно задавать через паттерны, включая regex:
$inflector = InflectorFactory::create(LanguageEnum::EN); echo $inflector->pluralize('hardware'); // hardware echo $inflector->pluralize('metadata'); // metadata
Тесты
В репозитории PhpSoftBox тесты запускаются, как правило, через Makefile.
make select-inflector make php-test
统计信息
- 总下载量: 79
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 1
- 依赖项目数: 3
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-02-05