robole/sulu-ai-translator-bundle
A Symfony bundle for Sulu CMS that brings AI-powered translation into the admin interface. Translate pages and snippets, speed up multilingual content workflows, and manage translations without leaving Sulu, with configurable AI provider integration.
The core finding: this is not a Laravel package. Despite the brief framing it as a "Laravel/PHP package," robole/sulu-ai-translator-bundle is a Symfony bundle built for Sulu CMS (a Symfony-based CMS, not a Laravel application). There is no service provider, no facade, no config publishing, no Eloquent/queue integration in the Laravel sense. Any plan that starts with "composer require in our Laravel app" is wrong and should be stopped at the spike stage.
Architecture fit. For a Sulu-based content stack, the fit is genuinely good: Sulu bundles hook into the admin UI and the content-editing workflow, and Sulu's structure/metadata system is what makes "translate any type of content" plausible — pages, snippets, articles, and custom entities all expose translatable fields through a common abstraction. The bundle appears to add a translation action that pipes field content to DeepL and writes results back into the localized field. That is the right seam: it sits at the editorial workflow layer, not in a bespoke API layer.
Integration feasibility. Realistically a half-day for a Symfony/Sulu team: add to config/bundles.php, configure the DeepL auth key and locale mapping, verify which content types are wired up. The friction is not installation — it's the locale mapping (DeepL supports a finite set; any locale outside it silently degrades to manual translation) and the editorial review step, which the bundle almost certainly does not solve for you.
Technical risk. High, and mostly ecosystem risk rather than code risk:
Key questions to resolve before committing:
Stack fit. Two distinct paths, and the choice dominates everything downstream:
Migration path (Path A). Stand up a non-production Sulu instance with a representative content set — one page template, one article type, two locale pairs, and a glossary of ~30 brand terms. Run translation, then have a native-speaking editor grade output on terminology consistency, tone, and HTML/markup preservation. Compare cost per 1,000 words against our current manual/agency baseline. Only then discuss production.
Compatibility. Pin exact Sulu, Symfony, and PHP versions in composer. Confirm the DeepL API version targeted and whether the bundle handles the API's character-quota and 429 responses gracefully. Assume no backward-compatibility guarantees until proven otherwise.
Sequencing.
Maintenance. Plan to own this. With one maintainer and no dependents, the realistic operating model is "we are the maintainers of our fork." That means assigning a named engineer, tracking upstream, and budgeting a small recurring maintenance allowance (roughly 1–2 days per Sulu upgrade cycle) rather than assuming passive dependency consumption.
Support. No vendor SLA, no paid support, community issues only. DeepL support is a separate relationship and covers only the API, not the bundle's integration behavior. Editors will escalate translation failures to engineering, not to a vendor.
Scaling. Two ceilings. Cost: DeepL bills per character, so bulk re-translation of large content trees is a real budget event — a full-site relaunch across five locales is not a rounding error. Throughput: DeepL enforces rate limits; translating a 40-field page on save will be slow and will hit 429s. The bundle must be paired with a queue and a "translate only changed fields" strategy, otherwise we pay repeatedly for unchanged content. Verify whether translation memory / skip-unchanged logic exists; if not, that is our first fork.
Failure modes to design for:
Ramp-up. Editors: near-zero, which is the package's main selling point — a button in the UI they already use. Developers: moderate for Sulu bundle configuration, moderate-to-high for the DeepL integration internals during incident response. If Path B applies, ramp-up is "a sprint of engineering plus ongoing ownership," and the 19-star/0-dependent risk profile becomes irrelevant because we are no longer depending on it.
Recommendation. Green-light only as a contained pilot inside a Sulu stack, with a DPO sign-off and an explicit fork-and-own decision recorded up front. If our stack is Laravel, decline the dependency and instead allocate a short spike to extract the translation-orchestration pattern into our own queued DeepL integration.
How can I help you explore Laravel packages today?