benriadh1 / laravel-filament-translation-manager
Translation Manager for Filament.
Package info
github.com/benriadh1/laravel-filament-translation-manager
pkg:composer/benriadh1/laravel-filament-translation-manager
Requires
- php: ^8.2
- filament/filament: ^5.0
README
A Filament v5 translation management plugin for browsing, filtering, and updating Laravel translation keys from inside your admin panel, with inline editing, missing-translation workflows, prefix tabs, and optional status widget support.
Release version: 1.1.0
Highlights
- Dedicated
Translation Managerpage in Filament navigation - Inline editing with
SaveandCancelactions - Search by translation key and translation content
- Multi-select filters for groups and locales
Only show missing translationsworkflow- Prefix tabs with per-group missing and total counters
- Optional dashboard widget for missing translation count
- Publishable config, views, and package language files
- English and French package UI translations
- Sensible locale fallback using
app.localeandapp.fallback_locale
Requirements
- PHP
^8.2 - Filament
^5.0
Install
composer require benriadh1/laravel-filament-translation-manager
Optional publish commands:
php artisan vendor:publish --tag=benriadh-filament-translation-manager-config php artisan vendor:publish --tag=benriadh-filament-translation-manager-lang php artisan vendor:publish --tag=benriadh-filament-translation-manager-views
Register In Panel
use Benriadh1\FilamentTranslationManager\BenriadhFilamentTranslationManagerPlugin; use Filament\Panel; public function panel(Panel $panel): Panel { return $panel->plugins([ BenriadhFilamentTranslationManagerPlugin::make(), ]); }
Quick Start
After installation, open your Filament panel and go to Translation Manager.
By default, the package will:
- use
filament-translation-manager.localeswhen configured - otherwise fall back to
app.localeandapp.fallback_locale - scan your Laravel translation groups
- let your team search, filter, and update translations inline
This makes it useful for day-to-day content maintenance as well as translation QA before release.
Config Model
Main config file: config/filament-translation-manager.php
<?php use Filament\Support\Icons\Heroicon; return [ 'locales' => [], 'gate' => null, 'ignore_groups' => [], 'navigation_sort' => null, 'navigation_group' => 'benriadh-filament-translation-manager::messages.navigation_group', 'prefix_tabs' => [ 'sys' => 'System', 'acc' => 'Accounting', ], 'widget' => [ 'enabled' => false, 'gate' => null, 'sort' => null, ], 'navigation_icon' => Heroicon::OutlinedLanguage, ];
Core keys:
locales: Managed locales. If empty, the package usesapp.localeandapp.fallback_locale.gate: Laravel ability used to authorize access to the manager page.ignore_groups: Translation groups excluded from the manager and widget counts.navigation_sort: Navigation sort order in Filament.navigation_group: Sidebar group label, as a translation key or plain string.prefix_tabs: Translation groups shown as dedicated quick-access tabs.widget: Controls the optional missing-translations widget.navigation_icon: Navigation icon for the page. Setnullto hide it.
Common Configuration Examples
Managed locales
'locales' => ['en', 'fr', 'de'],
Authorization
'gate' => 'manage-translations',
Ignore framework or system groups
'ignore_groups' => ['pagination', 'passwords'],
Navigation placement
'navigation_group' => 'Settings', 'navigation_sort' => 90,
Hide the navigation icon
'navigation_icon' => null,
Prefix Tabs
Prefix tabs help surface important translation groups such as sys, acc, or any module-specific group used across your application.
Simple list format:
'prefix_tabs' => ['sys', 'acc'],
Custom label format:
'prefix_tabs' => [ 'sys' => 'System Core', 'acc' => 'Accounting', ],
When a configured group exists in your language files, the manager shows:
- a dedicated tab for that group
- the total number of keys in that group
- the number of missing translations for the selected locales
Groups included in prefix tabs are separated from the default All listing so high-priority translation sets are easier to review.
Translation Status Widget
Enable the widget to display the current number of missing translations:
'widget' => [ 'enabled' => true, 'gate' => 'manage-translations', 'sort' => 10, ],
Notes:
- If
widget.gateisnull, the widget falls back to the maingatevalue. - Ignored groups are excluded from the widget count.
- The widget uses the same resolved locales as the manager page.
Example Workflow
Imagine your application has a translation group called sys for shared UI labels used in a Companies resource.
lang/en/sys.php
<?php return [ 'companies' => [ 'title' => 'Companies', 'fields' => [ 'name' => 'Company name', 'email' => 'Email', ], 'actions' => [ 'create' => 'Create company', 'edit' => 'Edit company', ], ], ];
Use the keys in your Filament resource
<?php use Filament\Forms\Components\TextInput; use Filament\Schemas\Schema; public static function form(Schema $schema): Schema { return $schema->components([ TextInput::make('name') ->label(__('sys.companies.fields.name')) ->required(), TextInput::make('email') ->label(__('sys.companies.fields.email')) ->email(), ]); }
Add a dedicated tab for that group
'prefix_tabs' => [ 'sys' => 'SYS', ],
Now the sys group appears as its own tab in Translation Manager, making those labels easier to audit and complete.
Localization
The package ships with UI translations for:
resources/lang/en/messages.phpresources/lang/fr/messages.php
Publish them if you want to customize wording for your project:
php artisan vendor:publish --tag=benriadh-filament-translation-manager-lang
Inspiration
- Plugin concept inspired by Laravel Filament Chained Translation Manager
License
MIT. See LICENSE.md.