softspring/translatable-bundle
A Symfony bundle for building translatable Doctrine entities, letting you store and manage per-locale field values with locale fallback, so the same content can be served in multiple languages without duplicating your models or templates.
Build vs. buy for the localisation layer. This package is relevant to one decision and one only: whether to buy a translatable-entity persistence layer or build the equivalent in-house. For a Symfony/Doctrine application, in-house means an entity listener, a translation table per translatable entity, locale resolution with fallback, and hydration handling in collections. That is two to four engineer-weeks plus permanent ownership. A maintained bundle at zero licence cost is usually the cheaper answer — which is why this evaluation matters.
Framework scope correction (decision-blocking). The brief frames this as a "Laravel/PHP package." It is not. softspring/translatable-bundle is a Symfony bundle built on Doctrine ORM. There is no Eloquent analogue. If the target product is a Laravel codebase, this is a scoping error and the decision is "close the ticket," not "evaluate further." Confirm the target stack before any roadmap assumption is committed. This single check should be the first item in the next product review.
Roadmap: internationalisation of content-bearing features. If the roadmap includes multi-market content (per-locale product copy, CMS pages, catalogue fields), the choice of translation storage is a now decision, not a later one. Retrofitting localisation onto columns designed single-locale is a schema migration with a dual-read window — materially more expensive than starting with a translation table. This package is one candidate implementation for that slot, alongside a first-party build and a SaaS translation platform.
Licence posture and dependency policy. AGPL-3.0 is a genuine product decision, not a footnote. AGPL's network-use clause means legal review is required before it enters anything that could be construed as a distributed or network-served product. Many organisations maintain an AGPL denylist for product code. If ours does, this decision is closed regardless of technical merit. Route to legal early; it is a one-hour question with a multi-week tail if deferred.
Dependency-risk policy. Zero stars, a single small vendor, no changelog discipline, and a persistence-layer footprint. That combination should trigger whatever threshold we use for "named owner required." The decision this supports is not "adopt or not" but "adopt with an assigned internal owner and a pinning policy, or do not adopt."
What it does not support. Any decision about translation workflow — vendor management, TMS integration, translator tooling, content-ops process. This is storage and retrieval for locale-specific field values. Scope creep into "we'll get translation management too" is a predictable and wrong inference from the name.
Consider it when all of the following hold:
Look elsewhere when any of the following hold:
Confidence caveat to carry into any decision: the evidence base is thin. The v5.6.0 release note is an auto-generated diff link with no changelog body — no feature list, no deprecations, no migration notes. Version 5.5.10 → 5.6.0 implies a backward-compatible minor bump, but that is inference from a version string, not documentation. Treat any adoption recommendation as provisional until the diff is read and the composer.json constraint changes are confirmed.
For executives — the one-paragraph version: We are evaluating a free, open-source Symfony component that would let us store product content in multiple languages without building that capability ourselves. Two things need to be true before we proceed. First, the target system must actually be Symfony — our initial brief described it as Laravel-compatible and it is not, so we are confirming scope before spending further. Second, the licence is AGPL-3.0, a copyleft licence with obligations that trigger when software is served over a network; legal must clear it before we commit. If both clear, the commercial case is straightforward: it replaces an estimated two-to-four engineer-weeks of build plus ongoing ownership, at zero licence cost, with a manageable dependency risk that we mitigate by pinning the version and assigning an internal owner. The vendor is small with no support contract and an inconsistent changelog, which we should record on the risk register rather than assume away. If either check fails, we build in-house or defer, and we should say so early rather than after a migration.
For engineering — what we are actually asking:
v5.5.10...v5.6.0 directly and check the composer.json constraints. Specifically look for PHP/Symfony/Doctrine floor changes, any entity-listener or hydration changes, and any deprecations pointing at a 6.0 removal.(translatable_id, locale) index? What does the schema diff report on a clean install, and is it empty? What do query counts look like on a listing page over translatable fields?~5.5.10, upgrade one non-production service, review the migration with whoever owns the database, run the localisation tests, then roll forward. Budget recurring time for per-release diff review — with this vendor's changelog discipline, that is a standing cost, and it needs a named owner or it will not happen.The headline for the decision record: adopt only if Symfony/Doctrine is confirmed and AGPL clears; otherwise this is a scope mismatch or a licensing non-starter, and either conclusion closes the ticket faster than a technical bake-off would.
How can I help you explore Laravel packages today?