voicecode/laravel-nova-translation-manager
Manage Laravel translation files directly from Nova. Browse locales and groups, edit or add translation keys, and spot missing strings without touching your codebase. A simple admin UI for keeping every language file in sync.
Architecture fit. This is a Laravel Nova Tool, which makes the fit question narrow and binary: does the product already run Nova (Laravel's paid, first-party admin panel), and do we want non-engineers editing translation copy through an admin surface? The package layers a translation CRUD UI over Laravel's native localization system, reading and writing lang/ files (and possibly a DB-backed store, which must be verified). If we don't run Nova, or if translation changes are expected to flow exclusively through code review, this package is out of scope regardless of code quality — the entire value proposition is "the editor is already inside the admin panel we already pay for."
Integration feasibility. Mechanically trivial: composer require, register the tool in NovaServiceProvider::tools(), publish config/assets if tags exist. The friction is environmental, not code. The tool needs write access to the translation source of truth, which is the lang/ directory. In an immutable-container deployment — the standard Laravel production topology — a UI that writes files at runtime either fails silently against a read-only filesystem or produces drift between on-disk state and version control. Feasibility is therefore high in a VM/EC2-style monolith or an internal staging environment, and low in a GitOps/immutable-image stack unless we deliberately scope the tool to non-production.
Technical risk. The adoption signals are the headline: 0 stars, 0 dependents, score 0, no visible downstream consumers. That means no community review, no security audit, no public bug reports, and no evidence of maintenance cadence. Specific risks a TPM should carry into the decision:
'nav' => ['home' => 'Home']), dotted keys, JSON vs PHP files, and alphabetical re-sorting all affect whether edits produce clean diffs or whole-file rewrites. Unverified until tested against our actual files.Key questions to answer before committing:
spatie/laravel-translation-loader) must sit in the request path, and developer-edited lang/ files will silently go stale.composer.json require block say about Laravel and Nova versions? That, not the README, is the real compatibility answer.Gate/policies, or is it visible and writable to every Nova user?Stack fit. Adopt only where all of the following hold: Laravel + Nova already in production, file-based lang/ (or a DB loader we already operate), a modest locale count (roughly 2–8) and key volume, and a real, quantified toil problem — engineers fielding copy-change tickets. Where any of those fail, the correct decision is to decline and keep an editor plus a parity test.
Migration path. There is no data migration; there is a workflow migration. The sequence is: commit the current lang/ directory as a revert point, install in a non-production environment, confirm where the tool writes, make a handful of edits, and inspect git diff to confirm structure and ordering survive. Only after the diff is clean do we let a human other than the implementing engineer touch it. If the package turns out DB-backed, add the loader and a sync/export step before any editor sees the UI — otherwise we ship a tool that appears to work while serving stale strings.
Compatibility. Verify four things independently: (1) Nova major version and tool registration style, (2) Laravel version's lang directory layout (lang/ in Laravel 9+, resources/lang/ earlier), (3) PHP version against the package's require block, (4) frontend asset build compatibility with our Nova version — a tool page that renders blank is usually a built-asset mismatch. License status must be confirmed before we depend on it, because our fallback is a fork.
Sequencing.
en and each shipped locale, staging edits will be forgotten and never committed.Positioning against alternatives. This is a low-commitment probe of whether in-product translation management has demand, not a TMS decision. Lokalise/Phrase/Crowdin remain the answer the moment we need translator roles, review/approval chains, translation memory, glossaries, or audit trails. The package's job is to tell us cheaply whether we need any of that yet.
Maintenance. Pin the exact version in composer.json — no caret ranges. Treat the package as an internal tool with an internal owner. Budget review time at every Nova upgrade, since that's the failure point that will actually bite. The mitigating fact is that the core logic (list files, parse arrays, write back) is a few days of work to reimplement; the exit cost is low, which is precisely what makes the low maintenance signal tolerable here. It would not be tolerable for anything in the request path.
Support. There is effectively no upstream support. Escalation path is: our own fork. That means a named engineer owns it, the source is vendored or mirrored internally, and we accept that a broken tool page is a "fix it or turn it off" situation rather than a vendor ticket. This is acceptable for an admin convenience tool and unacceptable for anything a customer touches.
Scaling. Adequate for modest key and locale counts; degrades in three predictable ways. Whole-file rewrites make git conflicts likely as soon as two people edit different keys in the same group — serialize translation changes through one PR or one editor at a time. Large files make the UI slow and diffs unreadable. And the tool stops being the right answer entirely once locale count, translator headcount, or review requirements cross into TMS territory. Plan the graduation criteria up front rather than discovering them mid-expansion.
Failure modes to instrument for.
config:clear, cache:clear, view:clear, plus the translation loader cache). This will generate support tickets that look like bugs.Ramp-up. Low for engineers — an hour of source reading and a staging install. Moderate for non-technical translators: they need a Nova account, a policy scoped to the translations tool and nothing else, and a short runbook covering "clear caches, commit, revert." Do not hand a file-write surface to a translator without that scoping; the policy is the control, and it must be verified rather than assumed.
Bottom line for the decision record. Low-cost, low-commitment, reversible, and gated on a spike. Approve as a time-boxed evaluation in a non-production environment with version pinning, a CI parity test, and a named owner — decline if it's proposed as a production translation platform or if we don't already run Nova.
How can I help you explore Laravel packages today?