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

Concrete5 Translation Library Laravel Package

mlocati/concrete5-translation-library

A PHP library for managing Concrete CMS (concrete5) translations: extract translatable strings from core and package source code, build and update translation dictionaries, and generate the .mo files needed to localize sites and add-ons.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. concrete5-community/translation-library is a standalone PHP i18n/translation library, not a Laravel package. It predates and is independent of Laravel's Translator, Illuminate\Translation, and the __() / @lang helpers. There is no service provider, no facade, no config file, and no published config stub — so it does not "drop in" to a Laravel application the way a first-party-oriented package would. Adopting it means deliberately replacing or shadowing Laravel's native translation stack, which is a significant architectural decision rather than an incremental dependency add. The realistic pattern is a thin adapter binding this library's translator behind a Laravel service provider, or scoping it to a subsystem (e.g. legacy concrete5 data, a CMS bridge, or import/export of translation catalogs) while leaving Laravel's own translator in place for application strings.

Integration feasibility. Technically feasible but with real friction. The library loads catalogs (PO/MO-style and, new in this release, optionally Twig templates) and exposes its own lookup API; wrapping it requires mapping its domain/locale resolution onto Laravel's locale lifecycle, handling its file-loading conventions alongside Laravel's lang/ directory, and deciding who owns the catalog cache. The new optional Twig support is only useful if the application actually renders Twig — Laravel's Blade stack gets no benefit, and pulling in Twig purely for translation templates introduces a second template engine to maintain. For a Laravel-first codebase the payoff is narrow; for a hybrid concrete5/Laravel estate it is more credible.

Technical risk. The headline risk is the version bump: minimum PHP moves from 5.3 to 7.2 inside a minor release (1.10.x → 1.11.0). That is a semver-incompatible environment requirement shipped without a major version signal, which tells you the project does not treat SemVer majors as compatibility contracts. Any consumer on Composer with a ^1.10 constraint will silently resolve to 1.11.0 and then fail its platform check or, worse, install on a runtime that no longer meets expectations. Second, PHP 7.2 itself is long past end-of-life (security support ended November 2020) — the new floor is still an unsupported runtime, so this release improves on 5.3 without bringing the package anywhere near current PHP 8.2/8.3 support. Third, the Twig dependency is described as optional but the release notes do not state how optionality is enforced (suggest vs. require, conditional autoloading), which is exactly where transitive dependency conflicts appear.

Key questions. Does 1.11.0 actually pass on PHP 8.x, or only claim 7.2 as a floor with no upper bound? Is Twig declared under suggest with a version constraint, or as a hard require? Was the PHP floor change accompanied by a major tag on any branch, and is there a deprecation policy? What is the maintenance cadence and bus factor for the concrete5-community org — how many active maintainers merged the last several releases? Does the library's catalog format overlap with Laravel's lang/ structure well enough to avoid dual-sourcing translation data?

Integration Approach

Stack fit. Poor-to-moderate as a whole-stack translation layer; moderate as a targeted component. Laravel applications should keep Illuminate\Translation as the default and treat this library as an integration boundary only where concrete5-format catalogs or an existing concrete5 translation corpus must be consumed. If the requirement is simply "translate a Laravel app," this package is the wrong tool and the assessment should say so plainly rather than force an adapter.

Migration path. Two viable sequences. (1) Read-path bridge: register a service provider that exposes this library's translator as a named binding, hydrate Laravel's translator from the same catalog source during a transitional period, and keep user-facing strings on __(). (2) Catalog migration: use the library one-off to parse legacy concrete5 translation files and emit Laravel-native PHP array or JSON language files, then remove the dependency entirely. Sequence (2) is strongly preferred for a Laravel-primary product: it converts a permanent dependency into a bounded migration task and eliminates ongoing compatibility exposure.

Compatibility. Pin explicitly. Do not accept a floating ^1.10 — require ^1.11 and add a config.platform.php entry so CI and local installs agree on the runtime floor. Confirm the Twig requirement shape before enabling it; if it is a hard require, the "optional" claim in the notes is wrong and the dependency graph widens. Audit the Composer lock for PHP constraint conflicts with other packages that still declare >=7.1 or lower. Add a CI matrix leg at the top and bottom of the supported PHP range to catch the eventual 8.x story.

Sequencing. (a) Confirm the PHP 8.x posture with the maintainers or a local test run before committing. (b) Land the dependency behind an adapter interface with the library as the only implementation, so it can be swapped for Laravel's translator or a catalog-import script. (c) If adopting Twig support, gate it behind its own config flag and feature test; do not enable by default. (d) Only after the adapter is proven, decide between permanent bridge and catalog-migration exit.

Operational Impact

Maintenance. Modest code surface but an unsupported-runtime dependency. The library's own floor (7.2) trails the PHP versions the Laravel app will run on, so the team inherits the job of verifying forward compatibility on every PHP upgrade — work a first-party Laravel component would not impose. Budget a standing line item for this; it is not a "set and forget" dependency.

Support. Community-supported, single-org, no commercial backing and no SLA. Escalation for a production defect is "open an issue." The 5.3→7.2 change appearing in a minor release is a concrete signal that compatibility surprises should be expected; treat the changelog as advisory and validate releases in CI rather than trusting the version number.

Scaling. Translation lookup is in-process and cache-friendly; scaling concerns are ordinary (catalog size, opcache, per-locale memory). The real scaling issue is catalog governance: if the library becomes a second source of truth alongside Laravel's lang/ files, translation drift and duplicated review workflows follow. Keep exactly one canonical catalog.

Failure modes. (1) Composer resolves 1.11.0 inside an existing ^1.10 constraint and installs onto a runtime below the new floor — build breaks at deploy, not at PR. (2) Missing or misconfigured optional Twig dependency surfaces as a runtime class-not-found on first render of a translated Twig template. (3) Divergent locale resolution between the adapter and Laravel's App::setLocale() yields silently untranslated strings — the failure is quiet and user-visible, not an exception. (4) Catalog format drift after an upstream change with no major version to warn you. Mitigate all four with a pinned version, a smoke test that asserts a known key translates in each locale, and a contract test around the adapter boundary.

Ramp-up. Low for the library API itself — it is a small, conventional i18n surface. The genuine ramp-up cost is contextual: engineers must understand Laravel's translation internals well enough to know where the adapter sits and what it overrides, plus the legacy concrete5 catalog conventions if that is the driver. Estimate a few days for a mid-level engineer to own the adapter and its tests; the ongoing cost is the PHP-version babysitting, not the API.

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.
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib