rodrigofs / filament-smart-translate
A comprehensive Laravel package for automatic translation support in Filament v4 applications with advanced fallback strategies.
Installs: 8
Dependents: 0
Suggesters: 0
Security: 0
Stars: 8
Watchers: 0
Forks: 1
Open Issues: 1
pkg:composer/rodrigofs/filament-smart-translate
Requires
- php: ^8.2
- filament/filament: ^v4.0
- spatie/laravel-package-tools: ^1.15.0
Requires (Dev)
- larastan/larastan: ^v3.6
- laravel/pint: ^1.22
- mockery/mockery: ^1.6
- orchestra/testbench: ^9.0
- pestphp/pest: ^3.0
- pestphp/pest-plugin-laravel: ^3.0
This package is auto-updated.
Last update: 2025-10-13 03:43:03 UTC
README
Complete translation solution for Filament v4 that provides automatic translation for all components with zero configuration, plus a powerful translation management interface for development.
β¨ Features
- π― Zero Configuration: Form fields, columns, actions work instantly
- π§ Simple Traits: Resources, Pages, Clusters need one line of code
- ποΈ Smart Fallbacks: Intelligent fallback strategies when translations are missing
- π± Translation Manager: Built-in interface to manage translations (development mode)
- π Multi-locale Support: Full Laravel translation system support
- π Status Dashboard: Visual overview of implementation status
- β‘ High Performance: Optimized with caching and lazy evaluation
π¦ Installation
1. Install Package
composer require rodrigofs/filament-smart-translate
2. Publish Configuration (Optional)
php artisan vendor:publish --tag=filament-smart-translate-config
3. Check Status
php artisan filament-smart-translate:status
π Quick Start
1. Set Your Locale
// config/app.php 'locale' => 'pt_BR', // or your preferred locale
2. Create Translation Files
// lang/pt_BR.json { "name": "Nome", "email": "E-mail", "user": "UsuΓ‘rio", "admin": "AdministraΓ§Γ£o", "create": "Criar", "edit": "Editar", "delete": "Excluir" }
3. Add Traits to Resources, Pages & Clusters
Only for Resources, Pages, and Clusters - other components work automatically:
// Resources use Rodrigofs\FilamentSmartTranslate\Traits\Resource\ResourceTranslateble; class UserResource extends Resource { use ResourceTranslateble; // β Add this line } // Pages use Rodrigofs\FilamentSmartTranslate\Traits\Page\PageTranslateble; class Settings extends Page { use PageTranslateble; // β Add this line } // Clusters use Rodrigofs\FilamentSmartTranslate\Traits\Cluster\ClusterTranslateble; class UserManagement extends Cluster { use ClusterTranslateble; // β Add this line }
That's it! Your Filament interface will now display translated labels automatically.
π― How It Works
β Automatic (No Code Changes)
These components work instantly with zero configuration:
- Form Fields: TextInput, Select, Checkbox, etc.
- Table Columns: TextColumn, BooleanColumn, etc.
- Actions: CreateAction, EditAction, DeleteAction, etc.
- Layout: Section, Tabs, Group, etc.
π§ Trait Required
These components need one trait per class:
- Resources: Model labels & navigation β
ResourceTranslateble - Pages: Navigation groups β
PageTranslateble - Clusters: Breadcrumbs & navigation β
ClusterTranslateble
| Component | Automatic | Trait Required |
|---|---|---|
| Form Fields | β Yes | β No |
| Table Columns | β Yes | β No |
| Actions | β Yes | β No |
| Layout | β Yes | β No |
| Resources | β No | β Yes |
| Pages | β No | β Yes |
| Clusters | β No | β Yes |
π± Translation Manager (Development Feature)
The package includes a powerful translation management interface for development environments.
β οΈ Important: Development Only
The Translation Manager should only be used in development environments to avoid Git conflicts during production deployments.
The Problem: The manager modifies JSON translation files directly. When you pull updates from Git to your production server, these local changes will conflict with incoming changes, potentially causing deployment failures or requiring manual conflict resolution during git pull operations.
use Filament\Pages\Page;use Rodrigofs\FilamentSmartTranslate\Traits\Page\PageTranslateble;
π§ Enable Translation Manager
1. Register the Plugin
Add the TranslationPlugin to your Filament panel:
// app/Providers/Filament/AdminPanelProvider.php use Rodrigofs\FilamentSmartTranslate\TranslationPlugin; public function panel(Panel $panel): Panel { return $panel // ... other configurations ->plugins([ TranslationPlugin::make(), // β Add this line // ... other plugins ]); }
2. Configure the Translation Manager
Add to your configuration:
// config/filament-smart-translate.php 'translation_page' => [ 'enabled' => true, 'dev_only' => true, // β Important: Only in development 'navigation' => [ 'enabled' => true, 'group' => 'Development', 'sort' => 99, 'icon' => 'heroicon-o-language', ], 'page' => [ 'title' => 'Translation Manager', 'navigation_label' => 'Translations', ], 'features' => [ 'export' => true, 'backup' => true, 'language_selector' => true, 'bulk_actions' => true, ], 'authorize' => env('APP_DEBUG', false), // Only when debug is enabled ],
πΈ Translation Manager Features
Translation Manager interface showing the translation editing capabilities
π Multi-language Interface
- Switch between locales instantly
- Add, edit, delete translations
- Bulk operations for efficiency
π Statistics Dashboard
- Total translations count
- Empty translations detection
- Progress tracking per locale
πΎ Backup & Export
- Automatic backups before changes
- Export translations to JSON
- Safe file handling
π Search Functionality
- Search translations by key or value
π‘οΈ Production Alternative
If you must use the Translation Manager in production:
- Remove translation files from Git tracking:
# Add to .gitignore lang/*.json !lang/en.json # Keep English as template
- Configure for production:
'translation_page' => [ 'enabled' => env('TRANSLATION_MANAGER_ENABLED', false), 'dev_only' => false, 'authorize' => function () { return auth()->user()?->hasRole('admin'); }, ],
- Use environment variable:
# Only enable when needed TRANSLATION_MANAGER_ENABLED=true
β οΈ Recommendation: Keep the Translation Manager in development only to avoid Git conflicts during production deployments (git pull operations).
ποΈ Fallback Strategies
When translations are missing, the package applies intelligent fallback strategies:
Built-in Strategies
1. original (Default)
Keeps the original key format:
user_name β User name
email_address β Email address
2. humanize
Converts to human-readable format:
user_name β User Name
emailAddress β Email Address
3. lower_case
Converts to lowercase with hyphens:
user_name β user-name
email_address β email-address
Component-Specific Configuration
'components' => [ 'fields' => [ 'enabled' => true, 'fallback_strategy' => 'original' ], 'resources' => [ 'enabled' => true, 'fallback_strategy' => 'humanize' ], 'actions' => [ 'enabled' => true, 'fallback_strategy' => 'lower_case' ] ]
Custom Strategies
Create your own fallback strategy:
<?php namespace App\Strategies; use Rodrigofs\FilamentSmartTranslate\Support\Fallback\FallbackStrategyInterface; class UppercaseStrategy implements FallbackStrategyInterface { public function apply(string $key): string { return strtoupper(str_replace('_', ' ', $key)); } }
Register in configuration:
'fallback_strategies' => [ 'uppercase' => \App\Strategies\UppercaseStrategy::class, ],
π Translation Structure
Recommended: Component-Prefixed Keys
{
"resources.user": "UsuΓ‘rio",
"navigations.admin": "AdministraΓ§Γ£o",
"actions.create": "Criar",
"fields.name": "Nome"
}
Alternative: Direct Keys
{
"name": "Nome",
"email": "E-mail",
"user": "UsuΓ‘rio"
}
Resolution Order
- Component-prefixed key (
resources.user) - Direct key (
user) - Fallback strategy result
π Status Command
Get a complete overview of your setup:
php artisan filament-smart-translate:status
Shows:
- β Package status (enabled/disabled)
- π― Trait usage (Resources, Pages, Clusters)
- β οΈ Missing trait candidates
- π§ Component coverage with strategies
- π Overall statistics and tips
Example output:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Filament Smart Translation - Status Report β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π¦ Package Status: β ENABLED
π― Trait Usage:
β ResourceTranslateble (2 files)
β Files that could use traits: 3 candidates
π§ Component Coverage:
β Resources (humanize)
β Fields (original)
β Actions (lower_case)
π Coverage Summary: 9/9 components active (100%)
π‘ Complete Example
Resource with Translation Trait
<?php namespace App\Filament\Resources; use App\Models\User; use Filament\Forms; use Filament\Resources\Resource; use Filament\Tables; use Rodrigofs\FilamentSmartTranslate\Traits\Resource\ResourceTranslateble; class UserResource extends Resource { use ResourceTranslateble; // β Add this for model labels protected static ?string $model = User::class; protected static ?string $navigationGroup = 'user_management'; public static function form(Form $form): Form { return $form->schema([ // These translate automatically (no code changes needed) Forms\Components\TextInput::make('name'), Forms\Components\TextInput::make('email'), Forms\Components\Select::make('role'), Forms\Components\Section::make('profile') // Section titles too! ->schema([ Forms\Components\TextInput::make('first_name'), Forms\Components\TextInput::make('last_name'), ]), ]); } public static function table(Table $table): Table { return $table ->columns([ // Column headers automatically translated Tables\Columns\TextColumn::make('name'), Tables\Columns\TextColumn::make('email'), Tables\Columns\TextColumn::make('role'), ]) ->actions([ // Action labels automatically translated Tables\Actions\EditAction::make(), Tables\Actions\DeleteAction::make(), ]); } }
Translation File
// lang/pt_BR.json { "name": "Nome", "email": "E-mail", "role": "FunΓ§Γ£o", "first_name": "Primeiro Nome", "last_name": "Γltimo Nome", "profile": "Perfil", "resources.user": "UsuΓ‘rio", "navigations.user_management": "Gerenciamento de UsuΓ‘rios", "actions.edit": "Editar", "actions.delete": "Excluir" }
Result: Complete Portuguese interface with intelligent fallbacks!
π§ Configuration
Full configuration options:
<?php // config/filament-smart-translate.php return [ // Global enable/disable 'enabled' => env('FILAMENT_SMART_TRANSLATE_ENABLED', true), // Translation Manager (Development Feature) 'translation_page' => [ 'enabled' => false, // Enable translation management interface 'dev_only' => true, // β οΈ Important: Only in development 'navigation' => [ 'enabled' => true, 'group' => 'Development', 'sort' => 99, 'icon' => 'heroicon-o-language', ], 'page' => [ 'title' => 'Translation Manager', 'navigation_label' => 'Translations', ], 'features' => [ 'export' => true, 'backup' => true, 'language_selector' => true, 'bulk_actions' => true, ], 'authorize' => env('APP_DEBUG', false), ], // Component-specific settings 'components' => [ 'resources' => [ 'enabled' => true, 'fallback_strategy' => 'original' ], 'fields' => [ 'enabled' => true, 'fallback_strategy' => 'original' ], 'actions' => [ 'enabled' => true, 'fallback_strategy' => 'original' ], // ... other components ], // Custom fallback strategies 'fallback_strategies' => [ // 'custom' => \App\Strategies\CustomStrategy::class, ], // Debug settings 'debug' => [ 'log_missing_translations' => env('FILAMENT_SMART_TRANSLATE_DEBUG', false), ], ];
π§ Troubleshooting
Translations Not Showing?
- Check locale: Verify
config/app.phplocale setting - Clear cache: Run
php artisan config:clear - Add traits: Resources/Pages/Clusters need traits
- Check files: Ensure translation files exist
- Run status: Use
php artisan filament-smart-translate:status
Resources/Pages/Clusters Not Translating?
Add the required traits:
// Resource use ResourceTranslateble; // Page use PageTranslateble; // Cluster use ClusterTranslateble;
Translation Manager Not Working?
- Register the plugin: Add
TranslationPlugin::make()to your Filament panel - Enable in config: Set
translation_page.enabled => true - Check authorization: Verify
authorizecallback - Development mode: Ensure you're in development environment
- Clear cache: Run
php artisan config:clear
Git Conflicts During Production Deployment?
The Issue: Translation Manager changes create local modifications that conflict with git pull during production updates.
Recommended Solution: Use Translation Manager only in development.
Alternative for Production Use: Remove translation files from Git tracking:
echo "lang/*.json" >> .gitignore git rm --cached lang/*.json
π Requirements
- PHP: 8.2+
- Laravel: 11+
- Filament: 4.0+
π€ Contributing
- Fork the repository
- Create your feature branch
- Run tests:
composer test - Submit a pull request
π License
MIT License - see LICENSE file.
π Acknowledgements
- Filament Team: For the amazing admin framework
- Laravel Team: For the solid foundation
- Community: For feedback and contributions
Made with β€οΈ for the Filament community
