enhavo/translation-bundle
Enhavo Translation Bundle is a subtree split of the open-source Enhavo CMS, a flexible PHP CMS built on the full-stack Symfony framework for managing complex data structures through a clean, usable interface.
Architecture fit — and a framing correction. The brief lists this as a "Laravel/PHP package." It is not. enhavo/translation-bundle is a Symfony bundle — a subtree split of the Enhavo CMS monorepo — and its value is inseparable from Enhavo's DI container wiring, resource layer, entity/model conventions, and admin UI. There is no Laravel integration path here: no service provider, no config publish, no Eloquent trait, no Blade/Livewire surface. A TPM should flag this before any engineering time is spent, because it converts the question from "can we drop this into our Laravel app?" (no) to "is this a signal to shortlist Enhavo for our multilingual content?" (maybe, but only if we are a Symfony shop).
Integration feasibility. Low as a standalone dependency. The README is branding plus a redirect to the main repository — no install steps, no config tree, no API surface, no version matrix. The only supported consumption path is the full enhavo/enhavo distribution; the split exists as a browsable mirror. Pulling the split directly alongside the parent risks double-autoload and class collision. For a TPM the operative conclusion is: this is not a package to evaluate; it is a component to be inherited as part of a CMS decision.
Technical risk. Compounding, and mostly outside our control:
enhavo/enhavo and propagate via automated subtree split. That is sync lag and split-integrity risk we cannot remediate.composer.json and service definitions, which we have not read.Key questions to resolve before any commitment.
spatie/laravel-translatable and stop.composer.json requirements, and do they pin to our PHP and Symfony LTS targets?enhavo/enhavo releases, and at what cadence?Verdict. Treat as a component of a suite, not a package to score independently. A scorecard entry here would read near zero and tell us nothing we did not already know.
Stack fit. Symfony + PHP only. If our app is Laravel, the fit is zero — the correct move is a five-minute substitution decision (spatie/laravel-translatable or astrotomic/laravel-translatable) and this item is closed. If we are on Symfony but not Enhavo, the fit is poor: the bundle's proposition is Enhavo's side-by-side admin translation workflow, which is inert without Enhavo's admin UI, resource layer, and entity model.
Migration path. Two paths, in preference order:
composer require enhavo/enhavo (or the Enhavo skeleton), then enable translation via standard bundle registration. Only path with an upstream support surface and matched version tags.Do not add enhavo/translation-bundle as a direct dependency alongside enhavo/enhavo. Enforce that with a Composer conflict rule or a CI check.
Compatibility to verify before scheduling. PHP and Symfony LTS range (Enhavo historically tracks recent Symfony majors; a stale constraint is the most common blocker); Doctrine ORM/DBAL compatibility, since translation entities almost certainly persist relationally; and front-end asset pipeline assumptions (Webpack Encore vs. AssetMapper) against our build.
Sequencing.
composer.json, service config, and Doctrine mappings. Deliverable: one-page capability and dependency map.Treat a negative spike result as cheap information and a positive result as conditional approval pending a named owner for upgrades and a contingency if upstream stalls.
Maintenance. We inherit the upstream Enhavo project's maintenance posture, not a vendor-managed dependency. With 0 stars and 0 dependents there is no visible third-party maintenance community; budget realistically for being close to sole maintainers of any behavior we rely on, via forks or upstream PRs of our own.
Support. GitHub issues against the split are an unproductive channel — the README redirects upstream. SLA is unknown and should be measured, not assumed: open one real issue during the spike and track time-to-first-response. Record the number; it is the single most decision-relevant operational datum available.
Scaling. Technically bounded by the persistence layer (Doctrine + RDBMS) — fine to moderate volumes, potentially expensive at high locale × entity cardinality. The bigger scaling constraint is human: the admin workflow assumes Enhavo's UX, so translator onboarding and throughput matter far more than any technical ceiling.
Failure modes to plan for.
conflict rule plus CI check.Ramp-up. Two distinct curves. For an engineer already fluent in Symfony and Enhavo's bundle conventions, ramp is low-to-moderate. For everyone else — and for any team coming from Laravel — expect weeks, not days, and expect the absence of standalone docs to dominate the cost. Plan for exactly one or two engineers to become the internal Enhavo experts, and treat that concentration as a key-person risk in its own right.
How can I help you explore Laravel packages today?