mrgoodbytes8667/pluralize-bundle
A lightweight Symfony bundle that adds straightforward pluralization helpers to PHP applications. Easily convert singular English words into correct plural forms for labels, messages, and dynamic content, with a simple service-ready API that keeps text generation clean and consistent.
Architecture fit
Illuminate\Support\Pluralizer. There is still no service provider, so Laravel auto-discovery will not wire it up.Str::plural() / Str::singular() plus Blade @choice; Symfony ships Symfony\Component\String\Inflector\EnglishInflector; Twig ships |trans with ICU plural rules. Because v2.2.0 targets Symfony 7, the adopting app is by definition on a symfony/string version that already contains EnglishInflector — the gap the package fills is narrower than before, not wider.illuminate/support into a Symfony 7 app imports collections, contracts, macroable, and conditionable to obtain one string function, and that import is now being carried forward onto a newer framework major rather than removed.Integration feasibility
composer require, bundle registration in config/bundles.php (Symfony) or manual Twig extension registration via TwigBridge (Laravel). Sub-half-day proof of concept.Technical risk
NOASSERTION — unresolved and untouched by this release. This is still a hard compliance gate until legal clears the LICENSE file, and still an automatic SCA/SBOM flag. Nothing in a Symfony 7 compatibility bump changes this.illuminate/support range. A narrow illuminate/support constraint is still the most likely source of a late-surfacing composer update conflict — and note it now resolves a newer illuminate tree into a Symfony 7 app, which is a larger foreign payload than before, not a smaller one.Key questions
illuminate/support constraints at v2.2.0? The Symfony side is now answered (7.x supported); these two are not.count and format the number, or does it only pluralize a bare string? (unchanged by this release — assume still bare-string)Stack fit
Unchanged criteria, with the version now satisfiable on modern stacks. Fits only when all three hold: Twig is the template engine, the app is English-only (or pluralization is deliberately out of scope for i18n), and no translation/pluralization layer exists. Fails if the app is Blade-only, multi-locale, or already uses ICU |trans plural rules — in that case this package actively fights the existing architecture.
Migration path
Prefer reimplementation over adoption — and v2.2.0 marginally strengthens this, because a Symfony 7 host is guaranteed to have symfony/string available:
EnglishInflector from symfony/string, already a transitive dependency, no illuminate/* import, natively constraint-aligned with the framework. Wrap it in a small Twig extension.Str::plural() directly in a local Twig extension; the framework already owns the dependency.Compatibility
Evaluate against v2.2.0, not v2.1.1 — the earlier constraint check is stale. Run composer why-not mrgoodbytes8667/pluralize-bundle <php-version> and inspect composer.json directly. Confirm the Symfony 7 constraint, the Twig version range overlapping the app's constraint, and specifically the illuminate/support range against the next framework major.
Sequencing
child/children, person/people), uncountables (sheep, data), zero/one boundary, and an explicit locale guard or assertion that the app is English-only.Maintenance
Effectively self-maintained for defects; periodically refreshed for framework majors by upstream. Revised budget: expect to own any bug fix yourself, but expect to spend roughly zero effort on Symfony-major compatibility. Dependabot/SCA noise from an illuminate/support transitive tree inside a Symfony app remains, and now resolves a newer illuminate tree on Symfony 7.
Support
No SLA, no issue triage expectation, no CVE process. Single maintainer, active as of v2.2.0 but with a historically sparse release history. Treat any defect as yours to fix; treat framework-major compatibility as plausibly handled.
Scaling
Negligible and unchanged. In-process, static, no I/O, no state — Twig compiles the extension once, and rendering cost is immeasurable next to template compilation and DB access. No capacity planning or profiling required. The pluralizer's rule tables are tiny.
Failure modes
Unknown "pluralize" filter at render time if the bundle is not registered in the kernel — a 500 on every affected template.illuminate/support or PHP rather than Symfony, which v2.2.0 now covers.Ramp-up
Under an hour. Unchanged. The cost is governance and correctness, not learning curve.
Verdict: low opportunity score still stands, but the reasoning must be corrected. v2.2.0 is a signal release, not a feature release: it retires the "unmaintained / stalled cadence" objection and the Symfony-major constraint risk, while leaving the license unresolved, the illuminate/support coupling intact, the cross-framework architectural impurity intact, and every correctness gap (no count-awareness, English-only, no number formatting) untouched. The honest position is that the package is now safe to depend on and still not worth depending on: a Symfony 7 host already has symfony/string and EnglishInflector one file away. Reimplement the filter internally against symfony/string or Str::plural() — same functionality, none of the license, dependency, or locale risk.
How can I help you explore Laravel packages today?