vm5/entity-translations-bundle
A Symfony bundle for adding locale-aware translations to Doctrine entities. Store and retrieve translated fields per language, manage multilingual database content, and integrate translations into forms and templates with minimal configuration. Ideal for multilingual Symfony applications.
Architecture fit. The first thing a TPM should verify is the stack mismatch: despite being catalogued as a "Laravel/PHP package," this is a Symfony bundle (EntityTranslationsBundle, registered via config/bundles.php by convention, not a Laravel service provider). Architecturally it binds to Doctrine ORM — translated-field storage, event listeners/subscribers, and a repository/query layer that hydrates translations for entities. So fit is conditional: acceptable in a Symfony + Doctrine application, poor in Laravel/Eloquent, where nothing here can be dropped in — you'd be re-implementing the concept, not the package. Confirm the host stack first; it flips the verdict from "conditional" to "not applicable."
Integration feasibility. Mechanically small on the right stack: composer require, enable the bundle, configure the translation target, annotate/attribute the entity fields, generate schema, test. Feasibility is dominated instead by the dependency graph: last release January 2021, so its Composer constraints target roughly PHP 7.x–8.0, Symfony 4/5, and Doctrine 2.x. A modern project (PHP 8.2+, Symfony 6/7, Doctrine 3) will likely hit constraint conflicts, deprecated bundle registration patterns, and Doctrine 3 API changes. Budget a spike that proves "persist and read one translated field" on the actual pinned versions before anything else.
Technical risk. High, and mostly non-technical to mitigate:
readonly, and enums on modern PHP.Key questions.
composer.json allow them?Translatable or KNPLabs/DoctrineBehaviors for Symfony; spatie/astrotomic translatable for Laravel?Stack fit. Treat as Symfony-only until proven otherwise. On Laravel: do not integrate — use a Laravel-native translation package or a purpose-built translations table with relations/JSON columns. On Symfony: directionally correct for Doctrine entity translation.
Migration path. Adoption here means fork-and-own from day one:
Compatibility. Build a small matrix (PHP × Symfony × Doctrine) and run it in CI on the fork. If a target cell fails and isn't cheaply patchable, stop — that's the decision point.
Sequencing. (1) One-day spike: read/write one translated field in a scratch app on target versions → (2) go/no-go → (3) fork + patch + tests → (4) pilot → (5) rollout. Do not sequence this after the schema is locked; the migration design is the genuinely hard part.
Maintenance. The license is $0 (MIT); the cost is stewardship. Expect to own 100% of maintenance — compatibility patches, bug fixes, docs. Compare the ongoing ownership cost against a few days of building a custom translation table for one or two entities; at small scope, in-house is likely cheaper and lower risk than adopting an orphan.
Support. No vendor, no active community, 9 stars. Support = whichever engineer reads the source. Knowledge concentration is the main operational hazard: require a second reviewer and record a one-page ADR plus a runbook on the fork.
Scaling. Watch four things:
(entity_id, locale) and measure.Failure modes to plan for.
readonly properties.Ramp-up. Thin docs and unconventional internals: roughly 1–2 days for a Doctrine-fluent engineer to reach competence, longer for anyone else. If the team isn't already deep in Doctrine ORM events and hydration, this is a poor learning investment for a 9-star library.
Bottom line. Score 0.105, orphaned since Jan 2021, zero dependents: do not adopt as-is. It is defensible only if (a) the stack is Symfony + Doctrine, (b) scope is small and stable, and (c) you accept fork ownership up front. Otherwise choose a maintained ecosystem package or build the small translation table yourself.
How can I help you explore Laravel packages today?