symfonycasts/object-translation-bundle
A lightweight Symfony bundle for translating Doctrine entities and other objects without extra translation tables. Store translations in a JSON column via a simple trait and interface, then read and set locale-aware values directly on your objects.
Framework mismatch — first-order finding. The release notes are for SymfonyCasts/object-translation-bundle, a Symfony bundle, not a Laravel package. It ships a Bundle subclass, a DI extension, Doctrine event subscribers/loaders, and depends on doctrine/doctrine-bundle. It has no Laravel service provider, facade, config publish tag, or Eloquent integration. Before any engineering time is spent, confirm whether the intended target is a Laravel application or a Symfony service inside the estate.
Architecture fit. In a Symfony + Doctrine codebase the fit is excellent: it stores per-locale translations in a JSON column on the entity itself, avoiding a separate translation table and join-heavy hydration. In a Laravel codebase the fit is poor — Laravel's default ORM is Eloquent, and adopting this bundle means adopting Doctrine ORM plus DoctrineBundle plus Symfony's DI kernel conventions. That is a framework-inside-a-framework decision, not a package decision.
What v1.1.0 actually changes. Two dependency-widening PRs and nothing else:
doctrine/doctrine-bundle v3 compatibility (constraint widening)There are no new features, no deprecations, and no documented breaking changes. The risk is not in the diff — it is in what the diff implies about the project's maturity and test surface.
Technical risk.
Key questions for the maintainer / for us.
spatie/laravel-translatable or astrotomic/laravel-translatable instead.Stack fit. Requires Symfony (6/7/8 range implied), Doctrine ORM, and doctrine/doctrine-bundle 2 or 3. Laravel does not ship Doctrine by default; the community doctrine/orm integrations for Laravel lag upstream and add their own maintenance burden. Treat this as a Symfony-only dependency unless the framework-mismatch question above is resolved in favor of Symfony.
Migration path (if we proceed).
Translatable interfaces, or the bundle's locale-resolution semantics leak into domain or application code.TranslationRepository / TranslatableContent — and have the bundle-backed implementation sit behind it.Compatibility.
composer why-not / composer update --dry-run to surface constraint conflicts early.doctrine/doctrine-bundle v3 against our existing Doctrine config before widening locally — v3 removes deprecated config keys.Sequencing.
Maintenance. Low upstream traffic plus external drive-by contributions means we should assume we may need to fork or vendor-patch. Budget a small but standing allocation for dependency upkeep — the failure mode is not the bundle breaking, it is doctrine/doctrine-bundle or Symfony moving and this bundle not following promptly.
Support. Community-only. SymfonyCasts is a training company, not a support vendor; there is no SLA, no LTS commitment, and no commercial backstop. Escalation path is GitHub issues.
Scaling. JSON-column translation storage is convenient but has real query consequences:
Failure modes to monitor.
Ramp-up. The bundle's own API surface is small and learnable in days. The real ramp-up cost is Doctrine + Symfony DI fluency for a team that primarily writes Laravel/Eloquent: realistically two to three weeks before a mid-level engineer is productive and confident, plus ongoing friction from switching mental models between Eloquent and the Doctrine Unit of Work.
Recommendation. Do not adopt on the strength of v1.1.0 — the release is dependency housekeeping and carries no functional signal either way. Resolve the framework-scope question first. If the target is Symfony, this is a reasonable, low-ceremony option worth a prototype, contingent on confirming that Symfony 8 and doctrine-bundle 3 are actually in CI. If the target is Laravel, this is the wrong package and the assessment should be redirected to an Eloquent-native translation library.
How can I help you explore Laravel packages today?