optimistdigital/nova-lang
Laravel Nova package that adds multi-language support to your admin panel: manage languages, switch the active locale per user, and localize resources and fields. Integrates with nova-translatable and ships middleware, a Language model, and configurable fallbacks.
Architecture fit. This is a Nova-only add-on, so its addressable surface is narrow by definition: teams that already pay for Laravel Nova and need (a) drag-and-drop reordering of a resource's index view and (b) a locale dimension on Nova resources. The second capability is the load-bearing one — it encodes an opinionated localization model (locale attached to a resource/record, with the UI scoped to the active locale). That model must match how your data is already shaped. If your i18n strategy is JSON translation columns or a sidecar translations table (spatie/laravel-translatable), this package fights your schema rather than complementing it. Treat the sorting feature as replaceable commodity; treat the locale feature as a data-model commitment.
Integration feasibility. Mechanically simple: composer require, publish config/migrations, add a trait to affected models, register the Nova tool/provider. The real gate is version alignment. A last release of 2020-10-28 places it in the Nova 3 / Laravel 7–8 / PHP 7.4 era, with Vue 2 + Laravel Mix asset tooling. Nova 4 (Vue 3, Vite) and Nova 5 will not consume those compiled assets, and the PHP-side service provider may reference APIs that have since moved. Expect a compatibility spike, not a drop-in install.
Technical risk. The risk is concentrated and identifiable rather than diffuse:
optimistdigital vendor was rebranded to outl1ne; the original namespace is effectively frozen. Last release ~5 years old.Key questions.
sortable() on index, or Nova 4+ index reordering) already cover the sorting requirement, letting us drop half the package?outl1ne/nova-lang) or a widely-used alternative (spatie/nova-translatable) that covers the same need with active support?Stack fit. Valid only for Laravel 7/8 + Nova 3 + PHP 7.4/8.0. Confirm exact composer constraints before committing; do not assume ^ ranges will resolve against a modern lockfile.
Migration path. Three viable routes, in order of preference:
outl1ne namespace has a Nova 4/5-compatible release. This is the lowest-effort path and preserves the author's intent.sort_order column, a Nova field/filter, and a reorder endpoint. Strongly consider this if the package's data model is only an approximate fit.Compatibility. Pin the package to an exact version, freeze Nova and Laravel minors in composer.json, and add an integration test that boots Nova and renders the affected resource index. This is the single highest-value guardrail, because the failure mode is a silent, late-breaking composer update.
Sequencing.
spatie/nova-translatable.Maintenance. Assume full ownership from day one. There is no upstream to lean on. Add a standing line item to every Nova upgrade: re-validate this package, re-compile assets, re-run index/filter tests.
Support. No vendor SLA, no active issue triage, thin documentation. Internal engineers become the de facto maintainers; knowledge should be spread across at least two people to avoid a single point of failure.
Scaling. Runtime cost is negligible — a WHERE locale = ? scope and an ORDER BY — but two structural concerns grow with data:
sort_order requires rewriting sibling rows on insert/reorder, which is O(n) writes and a contention point on large or frequently-edited lists. Prefer sparse ordering (gaps of 1000) or a decimal/lexorank scheme if list size grows.Failure modes.
composer update pulls a Nova/Laravel version the package cannot boot → admin panel 500s. Mitigate with pinned constraints and a boot smoke test in CI.sort_order. Mitigate with transactions and a reindex job.Ramp-up. Low for anyone fluent in Nova — a day to read the source, half a day to wire up a resource. The hidden cost is organizational: the team must also internalize the package's localization opinion and the fork's upgrade procedure. For a 14-star, five-year-stale dependency, the honest recommendation is to fund the spike, expect to reimplement, and treat adoption as a last resort justified only if the locale data model is an exact match and a maintained fork exists.
How can I help you explore Laravel packages today?