ibexa/i18n
The official translation meta-repository for Ibexa, centralizing locale files synced from Crowdin so translations ship with the product. Enable them via the ibexa.ui.translations.enabled configuration, and contribute new translations through the Ibexa project on Crowdin.
What this actually is. ibexa/i18n is not a Laravel package. It is a Composer-installable content repository ("meta repository") that centralizes the translation strings for Ibexa DXP (formerly eZ Platform, a Symfony-based commercial CMS/DXP). It ships translated resource files plus a single configuration switch; there is no application code, no service provider, no middleware, and no Laravel integration surface. Any evaluation framed as "Laravel package adoption" is a category error — the correct framing is "do we adopt Ibexa DXP, and if so do we take the upstream translation bundle or manage translations ourselves."
Architecture fit. Fit is binary, not graduated. If the platform standard is Ibexa DXP, this package is the canonical, vendor-produced source of UI translations and belongs in the dependency graph by default. If the platform standard is Laravel, Symfony without Ibexa, or anything else, there is no architectural fit at all — the translation keys are Ibexa domain-specific (ibexa.ui.* style message catalogs) and are meaningless outside the Ibexa translation pipeline. There is no meaningful "cherry-pick the useful parts" path; extracting locale files as raw reference material would create an unmaintained fork with no consuming code.
Integration feasibility. Technically trivial: composer require ibexa/i18n, then set ibexa.ui.translations.enabled: true. No schema changes, no migrations, no runtime services, no API surface. The real feasibility question is legal and commercial, not technical.
Technical risk. Technical risk is low; commercial/legal risk is high and is the dominant factor:
NOASSERTION. The README states the code is available under the Ibexa Business Use License Agreement (Ibexa BUL) v2.3+, granted by holding a valid Ibexa DXP subscription. GitHub cannot classify this, hence NOASSERTION. This is a proprietary, entitlement-gated license — it must go through legal/procurement, not an engineering judgment call. Using the package outside a valid Ibexa subscription is a compliance exposure.readme, releases). No test suite, no CI badges, no contributing guide. For a data-only package this is acceptable, but it means translation regressions are caught by users, not by automated gates.Key questions for the vendor/team.
ibexa/i18n tags and Ibexa core releases?l10n_main → PR → squash-merge → tag) acceptable as our translation workflow, or do we have a separate TMS requirement?Stack fit. Only fits an Ibexa DXP stack. In an Ibexa project the layered translation model is: ibexa/i18n supplies baseline vendor translations → project-specific translation files override or supplement them → application config enables the UI translation layer. This package occupies the lowest, least customizable layer.
Migration path. For a Laravel or non-Ibexa codebase: do not pursue. There is no migration path worth designing; the effort would be spent rebuilding Ibexa's translation key namespace for zero reuse. Close this out as "not applicable to current stack" and record the rationale, rather than carrying it as a backlog item.
For an Ibexa DXP codebase:
ibexa/i18n at a tag matched to the installed Ibexa core version; commit composer.lock. Avoid floating constraints on a package with no compatibility documentation.ibexa.ui.translations.enabled: true in the relevant config scope, then enumerate the locales actually in scope and confirm each has a resource file and a non-trivial message count.Compatibility. Treat ibexa/i18n version as locked to the Ibexa core minor version. Plan translation-bundle bumps as part of the core upgrade runbook, not as independent maintenance. Expect key churn on every Ibexa minor upgrade.
Sequencing. Legal → version pin → enable → override layer → CI gate → production. Legal is not parallelizable with the rest in a meaningful way; it is the single go/no-go.
Maintenance. Low steady-state effort if you stay on a pinned tag and take translation updates only during planned core upgrades. The upstream workflow is automated (Crowdin ↔ GitHub, PR per sync batch), so upstream consumes its own toil. Your toil is: reviewing the upgrade-time diff, updating overrides for renamed keys, and re-running the completeness gate. Realistically 1–3 days per Ibexa minor upgrade, not ongoing weekly work.
Support. Vendor-supported only insofar as your Ibexa subscription is active. Community support is nil — 3 stars and 0 dependents means there is no user community to draw on. Internal ownership must sit with whoever owns the Ibexa platform; nobody else can meaningfully triage a translation defect. Escalation path is Ibexa support, which is a commercial relationship to maintain.
Scaling. Effectively free. Static resource files, loaded and cached by the framework; no network calls, no external services at runtime. Volume grows linearly with locale count, which is bounded by business need. No scaling concerns at any realistic tenant or traffic level.
Failure modes, ranked by likelihood × impact.
NOASSERTION licensing plus entitlement-gated access means an expired or absent subscription turns a working dependency into a compliance finding. Mitigate with procurement tracking tied to the Ibexa renewal date.Ramp-up. Negligible for a PHP/Symfony developer already working in an Ibexa codebase — the integration is one Composer line and one YAML flag, so a competent engineer is productive in under an hour. The real ramp-up is organizational: understanding the vendor's translation domain structure, the override precedence rules, and the Crowdin workflow. Budget half a day of documentation review and one pairing session with whoever owns the Ibexa platform. For a team without Ibexa experience, the ramp-up cost is not in this package at all — it is in Ibexa DXP itself, which dwarfs it.
TPM recommendation. Do not carry this as a package-evaluation item. Convert it into two decisions: (a) an architecture decision that the platform is or is not Ibexa DXP, and (b) if it is, a procurement decision on Ibexa BUL entitlement. If both resolve yes, adopt with a pinned version and a CI translation-completeness gate. If either resolves no, close as not applicable — the technical merits are irrelevant without the commercial precondition.
How can I help you explore Laravel packages today?