Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Translations Bundle Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

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:

  • A compatible ongr/elasticsearch-bundle and elasticsearch-php client pinned to the ES 1.x/2.x era.
  • An Elasticsearch cluster at that version, which is long past EOL and unavailable on managed cloud offerings.
  • Symfony 2.7/3.x-era container and event semantics.

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:

  1. Is the target application actually Laravel, or is this a Symfony legacy service being mis-scoped? If Symfony 2.x/3.x is genuinely in play, evaluate symfony/translation with a custom loader instead.
  2. Is "translations stored in Elasticsearch" a real business requirement (e.g., faceted multilingual search over content), or an incidental implementation detail of a former vendor's architecture? In most Laravel products it is the latter, and a database-backed translation store with a cache layer is the correct design.
  3. Which Elasticsearch version, if any, is already operated in-house? If the answer is not "an ES 1.x/2.x cluster we still run," there is no viable path.
  4. Who owns the fork, and is there an approved budget to maintain it indefinitely? If no name and no number, the answer is no.

Integration Approach

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:

  • Greenfield Laravel: do not integrate. Use 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.
  • Legacy Symfony app already on this bundle: the migration is a data extraction, not a code port. Scroll the translation index, export documents to JSON or a relational table, normalize the locale/document-type keys, and stand up a maintained translation provider against that store. Keep the ES index read-only during a parallel-run window, diff rendered output per locale, then decommission.

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.

Operational Impact

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:

  • Synchronous resolution: if translations are fetched per-request, an ES outage or elevated latency takes down page rendering in every locale. Requires a local cache layer with a stale-serve policy, which partially defeats the point of putting translations in ES.
  • Stale content: async indexing means editors publish and see old strings. Needs a freshness SLO and a user-facing invalidation control.
  • Silent fallback: missing keys degrade to the fallback locale or raw key without erroring — a class of bug that ships to production and is found by customers.
  • Mapping conflicts: translation document schema changes require reindex; without versioned indices and aliases this becomes a maintenance window.
  • Bulk indexing pressure: PHP-side document iteration on large translation sets triggers memory limits and timeouts; requires batching and backoff logic we would own.
  • Version drift: the moment the org standardizes on a supported ES version, this bundle stops functioning entirely.

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.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
unabomber/timezone
delatbabel/contacts
astritzeqiri/g-recaptcha
kevinongko/laravel-genode
developeruz/laravel-analytics
robbiep/afterthedeadline
frankkessler/incontact-laravel-oauth2-rest
jlxh/laravel-userlog
davidmgilo/timetables
qylinfly/role-permission
reflect-digital/conduit
takashato/laravel-vietqr
aitor24/laralang
kraenzle-ritter/entity-relations
dindigital/din-image
pomirleanu/image-colors
sawmainek/laravel-api-generator
delatbabel/jsonresponses
mouhamedfd/permissions-generator
eduplus/qr