backpack/translation-manager
An admin interface for managing Laravel translation files inside Backpack for Laravel. Browse, edit, create, and delete language lines and translation files across locales from a user-friendly admin panel.
This is a Backpack-for-Laravel add-on that puts a CRUD screen in front of your on-disk lang/ files, so non-developers can fix copy without a deploy. It is a UI, not a translation platform — no database, no TM, no vendor sync.
Minimal setup:
composer require backpack/translation-manager
php artisan vendor:publish --provider="Backpack\TranslationManager\TranslationManagerServiceProvider"
Then confirm three things before touching the UI:
config/backpack/base.php route prefix is non-default, note it.lang/, older apps use resources/lang/. Check the published config for the path/group settings and that it resolves against app()->langPath(), not a hardcoded string.php-fpm/www-data needs write access to the lang directory, or every save silently no-ops.Where to look first: the package's src/ is small — read the controller and the routes file to see exactly which routes and middleware got registered, then the config to see which locales and groups it will enumerate. The views directory tells you what's overridable.
First use case: open the manager, pick en / messages, and change one string. Then git diff lang/ — that diff is the whole contract of this package, and it tells you immediately how much file reformatting you'll be living with.
Copy-editing handoff. The highest-value pattern: source locale en is developer-owned, target locales are editor-owned. Give editors a Backpack role that can reach the translation screen only, and keep en behind a permission so keys don't get invented in the UI. Key renames stay a code task; string edits become a content task.
Sidebar/menu integration. Add the entry to config/backpack/sidebar.php (or the menu file) with a can: gate matching whatever permission you created. Do not rely on the package's default registration being hidden — verify by logging in as a limited role.
File-write → commit workflow. Treat saves as source changes: a post-save git commit or a nightly job that commits lang/ gives you history, review, and rollback the package doesn't provide. In practice this means: staging environment allows edits, production points at the same repo path, and deploys never overwrite uncommitted editor changes.
Missing-key auditing. The manager is a decent viewer of what exists per group/locale even if you don't let anyone edit. Pair it with a CI check that diffs the key set of en against every other locale and fails the build on missing keys — that keeps the UI honest, since saving through it won't add keys to sibling locales for you.
Stopgap posture for prod-editable strings. If the business genuinely needs runtime-editable copy (marketing banners, emails), don't stretch this into that role. Use a DB-backed translation loader and treat the file manager as a dev/staging tool. Mixing the two gives you "I edited it in the admin but the file wins" bugs that are miserable to trace.
validation.email.required stored flat, confirm the manager round-trips them before letting an editor loose.:name, :count, and plural foo|foos forms are edited as plain text with no validation. Add a post-save hook or a CI grep that asserts the set of :placeholders in each translation matches the source locale. This is the single most common way this package causes a production bug.lang/en.json support is typically partial relative to PHP group files. If your app uses JSON keys for JS strings, verify behavior rather than assuming.config:cache, or OPcache can make the change look ignored. When "it didn't save," check the file on disk first, then the loading layer.composer.json constraints against your Backpack version before upgrade season, and expect to pin or patch. The upside of the low surface area is that reading and forking the whole thing is an afternoon.How can I help you explore Laravel packages today?