dick/translationmanager
A Laravel package for managing application translations from a central interface, letting you browse, edit, and organize language files and locale strings without touching PHP arrays by hand.
Architecture fit. dick/translationmanager is an add-on to Dick Admin, Cristian Tabacitu's pre-Backpack Laravel admin panel. That framing matters more than the feature set: the package is split into an outer layer (service provider, routes, controllers, Blade views, menu registration, ACL hooks) that is hard-wired to a panel that no longer exists in the ecosystem, and an inner layer (a repository that enumerates resources/lang/{locale}/{group}.php, parses PHP arrays, and persists edits) that is genuinely reusable. Only the inner layer is worth evaluating. The outer 60–70% is dead weight against any modern stack and would be discarded on day one.
Integration feasibility. Low as a direct dependency, moderate as a pattern source. The 0-star / 0-dependent signal is definitive: no install base, no forkers maintaining a fork, no compatibility patches for Laravel 5.4+ (JSON translations), 6+, 8+, or 10/11. Expect PHP 5.x idioms, array() syntax, pre-PSR-4 or early PSR-4 autoloading, and reliance on facades/helpers that have since been removed. A composer require will likely fail or, worse, succeed and break at runtime.
Technical risk. The risk profile is dominated by the fact that this is a runtime write path into the application source tree:
var_export(), any authorized (or CSRF-compromised) user can inject executable PHP into a file that is autoloaded on the next request. This must be verified explicitly before any reuse.vendor::package namespaced keys, nested keys, pluralization pipes ({0} … |{1} …), and locale fallbacks. A package from the ~2015 era almost certainly handles only the simplest case.config:cache; edits may appear in the UI and be invisible to the application.Key questions to resolve before adoption.
var_export()/safe serialization, or string interpolation into PHP files?Stack fit. Poor as a dependency, good as a specification. The concept — a UI over translation keys with side-by-side locale columns — is correct and still under-served. The implementation is not portable. Three viable paths, in order of preference:
barryvdh/laravel-translation-manager (file + DB hybrid) or spatie/laravel-translation-loader (DB-backed translations with file fallback) — and configure it rather than writing code.Migration path. Regardless of path, introduce an explicit abstraction first: a TranslationRepository contract with allLocales(), groupsFor(locale), get(locale, group, key), put(...), forget(...), and export(locale, group). Implement a filesystem adapter that reads and writes the existing resources/lang tree and preserves formatting deterministically (sorted keys, var_export, short-array syntax, trailing newline). This isolates the old package's only real IP behind a seam we control, and lets us swap in a database adapter later without touching the UI.
Compatibility. Assume nothing works out of the box. Budget for: namespace/autoload fixes, service provider modernization (no deferred providers, explicit route registration, published config), replacement of deprecated helpers, Blade view rewrites against our admin stack, and middleware/authz wired to our own guard. Treat the upstream code as documentation of intent rather than code to be patched — patching an abandoned package is a permanent tax.
Sequencing.
rename), file locking.Recommendation. Do not adopt the package. Use it as a design reference for a small in-house build on Backpack, and prioritize the CI validation step over the editing UI.
Maintenance. Zero upstream maintenance. With 0 stars and 0 dependents there is no community to notice regressions, no one filing issues, and no one watching for CVEs in a package that writes executable PHP. Every future Laravel upgrade is our problem alone. Any code we take from it must be vendored into our own namespace with a clear provenance comment, so nobody later mistakes it for a maintained dependency.
Support. Self-support only. The author's attention moved to Backpack years ago; expecting fixes upstream is not a plan. Internally, this means the owning team must be able to answer "why did the Swedish plural form disappear?" without external help — which argues for instrumentation (change log, diff view) being in scope from the start, not a later enhancement.
Scaling. The filesystem-as-database model breaks in three predictable ways as we grow: (a) multi-node deployments — a write on one node is invisible to the others until deploy; (b) immutable artifacts/containerized deploys — edits are lost on the next rollout; (c) horizontal read replicas and CDNs — cached translations in the app or edge go stale silently. A database-backed overlay with a file fallback is the only model that survives all three. Plan for it before the editor ships, not after.
Failure modes to design against.
:name renamed in one locale only, producing broken output or exceptions at render time. Mitigate in CI, not in the editor.Ramp-up. Reading the package is quick — a day for a mid-level engineer to map the write path. Reimplementing the domain is deceptively slow: i18n key management looks like CRUD until you hit pluralization rules, placeholder validation, locale fallback chains, RTL, namespaced packages, and JSON vs. PHP storage. Budget two to three weeks for a production-grade editor with authz and audit, and one week for the CI validation step that delivers most of the value. The main staffing requirement is not Laravel depth but a partner on the localization side to define what "correct" means per locale — that review loop, not the code, is the schedule risk.
How can I help you explore Laravel packages today?