pms-nz/object-translation-bundle
Object Translation Bundle is a PHP package for attaching locale-specific translations to objects, making it easier to serve localized content without duplicating model logic. It provides straightforward storage and retrieval of translated object values for multilingual applications.
Translation entity back translations for any domain object (products, CMS pages, categories) instead of one join table per translatable type — a decision that directly affects schema sprawl, migration overhead, and how fast new content types can be made translatable.AbstractTranslation. Your existing entities and base classes stay yours, so adopting (and later removing) the bundle is cheaper. This lowers the "lock-in" line item in build-vs-buy scoring.Note: this is a Symfony bundle, not a Laravel package. If the platform decision is Laravel-first, this is a poor architectural fit regardless of feature quality — confirm framework alignment before treating the above as actionable.
Consider it when:
Look elsewhere when:
Due diligence before adoption: confirm the actual minimum PHP/Symfony/Doctrine versions, verify the release cadence and issue responsiveness, and write a throwaway spike that translates two different entity types end-to-end including a locale-fallback read path — that spike answers most of the questions this assessment raises.
For executives — one paragraph: We are evaluating a small open-source component that stores translations for any content object through a single, shared mechanism, rather than building a separate translation table every time we add a new content type. The latest release removes a constraint that previously forced our data classes to inherit from the library's base class, which meaningfully lowers both adoption cost and lock-in — our code stays ours, and backing the decision out later is cheaper. The relevant question is not "is this good software" but "will we translate more than one kind of content in the next 12–18 months." If yes, this is a credible, low-cost foundation that makes each subsequent content type cheap to localize. If no, we should not adopt it. Caveat for the room: it targets Symfony/Doctrine, so it only applies if that is our stack.
For engineering — the short version: It is a Symfony bundle providing a generic translation store keyed to arbitrary objects. v1.0.3 drops the requirement that your translation class extend AbstractTranslation; the contract is now interface-based, so existing entities and base classes come as-is. That is the change that makes adoption plausible for us. Trade-offs to weigh: it is a storage primitive only — admin UI, locale fallback policy, and translator export are ours to build; generic translation tables can complicate locale-filtered queries at scale; and it is a small, single-maintainer project, so pin the version and expect to read the source. Recommended next step is a two-entity spike, not a commitment.
What we are asking for: a timeboxed spike (roughly 2–3 days) proving two entity types, one fallback read path, and one admin list filtered by locale. Outcome is a go/no-go, not a rollout plan.
How can I help you explore Laravel packages today?