ongr/translations-bundle
ONGR TranslationsBundle adds database-backed translation management to Symfony apps, letting you store, edit, and organize translation messages as Doctrine entities instead of flat files, with import/export support for existing translations.
Architecture fit — poor, and the premise needs correcting. ongr/translations-bundle is not a Laravel package; it is a Symfony bundle from the ONGR Elasticsearch stack. It ships a Symfony DI extension, service definitions, compiler-pass wiring, and document classes that depend on ongr/elasticsearch-bundle's DocumentManager/IndexService and on the Symfony EventDispatcher contract. There is no service provider, no facade, no config publish path, and no Laravel-compatible container binding. In a Laravel application the integration surface is effectively zero unless we boot a partial Symfony kernel purely to satisfy bundle registration — an approach that adds an entire framework as a runtime dependency to a Laravel app.
Integration feasibility — low, and gated on an EOL data store. Even in its native Symfony context, the bundle's value proposition is storing translation documents in Elasticsearch and querying them with the ONGR filter/query abstractions. That implies:
ongr/elasticsearch-bundle and elasticsearch-php client pinned to the ES 1.x/2.x era.Composer resolution alone will likely block install on PHP 8.x. Any attempt to force it forward means forking three interdependent bundles (translations, elasticsearch, filter-manager) and porting their ES client usage to the modern 7.x/8.x API — a rewrite, not an integration.
Technical risk — high across every axis. Last release 2016-07-27, 5 stars, 0 dependents, single-vendor origin, no recent commit activity. Signals: no security patch path, no PHP 8 support, no maintainer responsiveness, and no downstream corpus to infer known-issue workarounds from. The absence of dependents is the most telling number — there is no community to lean on when something breaks.
Key questions to resolve before any further investment:
symfony/translation with a custom loader instead.Stack fit. None for Laravel. The bundle's responsibilities — persistent translation storage, per-locale retrieval, fallback chains — are already covered natively by symfony/translation (which Laravel's translator is built on) plus a storage driver. The Elasticsearch-specific capability (querying translations as searchable documents) is a niche requirement that the modern elasticsearch/elasticsearch PHP client can serve directly in ~200 lines without this bundle.
Migration path. Two distinct cases:
spatie/laravel-translation-loader for DB-backed translations, astrotomic/laravel-translatable for per-model translated attributes, and mcamara/laravel-localization for routing/locale negotiation. All are maintained, PHP 8 compatible, and have real dependent counts.Compatibility. Assume the following are hard blockers unless proven otherwise in a spike: PHP 8.x, Symfony 5/6/7, ES 7/8, and any managed Elasticsearch/OpenSearch service. Version constraints written in 2016 will not resolve.
Sequencing. If someone insists on validation, timebox it to one to two engineering days in a disposable container pinned to PHP 7.0 and ES 2.x, with a single success criterion: render one page in two locales from ES-backed translations. If that spike does not pass cleanly, close the evaluation — do not escalate to a pilot, and do not let it into a sprint backlog. If it does pass, the follow-on question is still "why are we running ES 2.x in 2025," and the answer will almost certainly terminate the effort anyway.
Maintenance. We would become the maintainers of an abandoned dependency on day one. The realistic fork scope is not a one-line patch: PHP 8 compatibility, Symfony container API changes, ES client 2.x→8.x API rewrite, and mapping/migration tooling. For a feature that is a table plus a cache in a conventional Laravel app, this is a poor use of engineering capacity and a permanent tax on every framework upgrade.
Support. Zero. Five stars and zero dependents means no issue triage, no Stack Overflow corpus, no third-party tutorials, no one to ask. Documentation is whatever is in the repository README. Every incident is a first-principles debugging exercise against an unfamiliar, unmaintained codebase.
Scaling. Read performance is genuinely good — ES is fast at locale-keyed lookups, and this is the one legitimate argument for the architecture. But it buys that speed by adding a stateful distributed system to the critical rendering path of every localized page. The real scaling cost is not throughput, it is dual-write consistency: translations live in ES while source content lives in the primary database, so every content update needs an indexing step, a retry policy, and a reconciliation job. That is a cache-invalidation problem with a cluster attached.
Failure modes to plan for:
Ramp-up. Deceptively steep. A new engineer must learn ONGR's DocumentManager conventions, annotation-based document mapping, and the Elasticsearch query DSL before making a safe change — knowledge that transfers to nothing else in our stack and is held by exactly the people who wrote the fork. Compare that to a Laravel translation driver, which an engineer can be productive in within an afternoon by reading the framework docs they already know. The ratio of learning cost to reusable knowledge is the strongest operational argument against adoption.
TPM recommendation. Do not adopt. The package is technically misaligned with the target stack, functionally superseded by maintained alternatives, and operationally unsupportable at 5 stars / 0 dependents / 9 years since release. Record the evaluation as closed with the rationale above so it is not re-proposed, and redirect the underlying requirement — multilingual content with fast lookup — to the maintained Laravel translation stack.
How can I help you explore Laravel packages today?