laravel-filament-translation-manager maintained by benriadh1
Filament Translation Manager
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.