coderello/laravel-nova-lang
A Laravel Nova tool for managing app translations directly from the admin panel. Browse and edit language files, add locales, and keep multilingual content organized without editing files manually.
Architecture fit
This is a data-only package, not a runtime component. It ships Laravel translation files (lang/{locale}/*.php) for the Nova UI and registers a publishable asset group. There is no service provider logic, no middleware, no database surface, and no API contract your application code can couple to. Architecturally that makes it a near-zero-risk fit: it can be added, removed, or replaced by a copied directory without touching application code. The only real coupling is to Laravel Nova's internal translation key namespace, which is a version-locked contract you do not control. Treat it as a localisation asset, not a dependency.
One amendment following 2.0.2: the release notes reference "development commands," which implies the repo carries maintainer tooling — most likely an artisan command to pull/diff Nova's own English lang files. Confirm whether those commands ship in the installed package (dev-only autoload vs. production autoload). If an update/diff command is available to consumers, it materially reduces the manual effort in our own upgrade runbook; if it is maintainer-only, nothing changes.
Integration feasibility
High. The integration is a composer require --dev (or a plain copy) plus php artisan vendor:publish into the Nova translation path (lang/vendor/nova/{locale}, with the caveat that Laravel 9+ moved the default lang directory from resources/lang to root lang/). Set config/app.php → fallback_locale = 'en' so missing keys degrade to English rather than rendering raw dotted keys. Realistic effort for a first locale: half a day including verification; each additional locale is near-zero incremental cost. No migrations, no config flags, no queue or cache implications. The publish step must be added to deployment/CI or the files drift between environments.
Technical risk
en "from latest Nova version," which is the single most consequential line in the changelog: it resets the English baseline the other locales are keyed against. What it does not establish is which Nova major that baseline corresponds to. If "latest" means Nova 4.x, a Nova 5 install still silently falls through to English or renders raw keys for any new or renamed key. This remains a correctness risk visible only in the target locale, which English-language QA will not catch — so the key-diff gate stays mandatory, but the odds of it passing have improved substantially.de, fr, es, ru, nl, zh-TW, zh-CN (and es twice, from two contributors — worth noting as a merge-quality question), adds lv, and leaves the remainder untouched. So coverage is now bimodal: eight refreshed locales plus one new one, and a long tail that is now further behind the refreshed en baseline. Prioritise scope against the refreshed set.Key questions
en file in 2.0.2 target, and does it match ours verbatim? (Diff the package's en file against vendor/laravel/nova/resources/lang/en — this is a 30-minute check and the single most important gate. The 2.0.2 refresh makes this cheap to do and likely to pass, but do not skip it.)de, fr, es, ru, nl, zh-TW, zh-CN, lv) now carries a different provenance from the untouched tail.Stack fit
Clean fit for any Laravel 9/10/11 application running Nova. No PHP version constraints beyond Nova's own, no conflicting service providers, no autoload pollution. Because the artefact is static files, it composes with any localisation approach already in place (Laravel's lang directory, per-locale overrides, or a translation management platform). It is also trivially compatible with a lang/vendor/nova/{locale} override layer, which lets you patch bad strings without forking the package.
Migration path
There is no migration — this is purely additive. For a fresh install, publish before the first locale switch. For an existing Nova install with hand-rolled translations, diff the current lang/vendor/nova directory against the package output first; the package can only be adopted wholesale or merged key-by-key, and blind publishing will overwrite local corrections. 2.0.2 makes this diff more valuable than before: the refreshed en is a better reference baseline, and the eight updated locales are worth re-diffing against any strings we already patched by hand.
Compatibility Two axes to pin explicitly:
resources/lang (Laravel ≤8) vs root lang/ (Laravel ≥9). Getting this wrong results in a silent no-op where translations simply do not apply, which reads as "the package doesn't work."
Also confirm the locale codes used here align with your app.locale / per-user locale values (e.g. pt_BR vs pt-BR, and the zh-TW/zh-CN convention used here). Mismatched codes fail silently.Sequencing
en. If coverage is materially incomplete, stop and replan (fork + fill gaps, or restrict to the locales that pass).fallback_locale.lv only if it clears review.Maintenance Low ongoing cost, but not zero. Expect: occasional upstream releases worth evaluating (2.0.2 is the first in roughly two years — do not infer a regular cadence from it), manual key diffing on every Nova upgrade, and ad-hoc corrections when a user reports an awkward string. Budget roughly 1–2 engineer-days per Nova major upgrade and near-zero between upgrades; the 2.0.2 refresh means our first adoption is now cheaper than originally scoped, since we are starting from a current English baseline rather than a 2023 one. The real maintenance is ownership of the locale files, which is why vendoring is usually the cheaper long-term posture.
Support No commercial support, no SLA, single-maintainer upstream. Acceptable here precisely because the blast radius is cosmetic — a bad string degrades UX, it does not break functionality, corrupt data, or expose a security surface. Escalation path is "fix the file in our repo," which is available to any engineer. Do not put this on a critical-path dependency register.
Scaling Scales trivially. Static PHP arrays loaded per request via Laravel's translator with its normal caching; a handful of files per locale, kilobytes each. No runtime cost of note, no per-user overhead, no external service. Adding locales is linear and uninteresting — which is the point.
Failure modes
en baseline.pt_BR vs pt-BR style divergence.Ramp-up Effectively zero for any Laravel developer. The conceptual load is "copy files to the right directory and get the locale codes right." Documentation needs are a one-page internal runbook: publish path, fallback config, locale code convention, key-diff procedure on Nova upgrade, and who approves new locales. Total onboarding cost under an hour.
Net position: still high value-to-effort for multilingual admin tooling — an 8.5/10 opportunity for a few hours of work — but the conditional has shifted in our favour. 2.0.2 refreshes en against a current Nova, updates eight locales, and adds lv, which addresses the dominant finding of the previous assessment (dormancy and key drift). It does not remove the gate: verify the target Nova major against the new en, and treat the unrefreshed locales as a lower tier. The decision to make is still not whether to use it but how to own it: vendor it, pin it, and put the upgrade diff on the runbook.
How can I help you explore Laravel packages today?