amzad / filament-translatable-group
Simplifying managing json based translation columns using grouped fields
Package info
github.com/amzad78692/filament-translatable-group
pkg:composer/amzad/filament-translatable-group
Fund package maintenance!
Requires
- filament/forms: ^4.0
- spatie/laravel-package-tools: ^1.15.0
Requires (Dev)
- larastan/larastan: ^3.0
- laravel/pint: ^1.0
- orchestra/testbench: ^9.0
- pestphp/pest: ^3.8
This package is auto-updated.
Last update: 2026-05-09 16:17:41 UTC
README
Automatically generate side-by-side grouped fields for each locale — no tabs, just columns.
Works seamlessly with spatie/laravel-translatable and lara-zeus/translatable-pro, but can be used standalone as well.
Installation
composer require amzad/filament-translatable-group
Then in any registered service provider boot() method configure the following:
use Amzad\FilamentTranslatableGroup\TranslatableGroup; TranslatableGroup::configureUsing(function (TranslatableGroup $component) { $component ->localesLabels([ 'ar' => __('locales.ar'), 'en' => __('locales.en'), ]) ->locales(['ar', 'en']); });
Usage
use Amzad\FilamentTranslatableGroup\TranslatableGroup; // Single Field — via macro TextInput::make('title') ->translatableGroup(); // Multiple Fields — via component TranslatableGroup::make() ->schema([ Forms\Components\TextInput::make('title'), Forms\Components\Textarea::make('content'), ]);
Each field is cloned for every locale and labelled "{Original Label} ({Locale Label})". Fields are arranged in a 2-column grid by default (configurable via ->columns()).
Customizations
Modify fields per locale
use Amzad\FilamentTranslatableGroup\TranslatableGroup; use Filament\Forms\Components\Field; $customizeField = function (Field $component, string $locale) { // ... }; // Globally in boot method TranslatableGroup::configureUsing(function (TranslatableGroup $component) use ($customizeField) { $component->modifyFieldsUsing($customizeField); }); // Single Field TextInput::make('title') ->translatableGroup(modifyFieldsUsing: $customizeField); // Multiple Fields TranslatableGroup::make() ->modifyFieldsUsing($customizeField) ->schema([ Forms\Components\TextInput::make('title'), Forms\Components\Textarea::make('content'), ]);
Override the default locales
$localesFn = function () { return ['ar', 'en']; // Also with labels: return [ 'ar' => 'Arabic', 'en' => 'English', ]; }; // Single Field TextInput::make('title') ->translatableGroup(locales: $localesFn); // Multiple Fields TranslatableGroup::make() ->locales($localesFn) ->schema([ Forms\Components\TextInput::make('title'), Forms\Components\Textarea::make('content'), ]);
Override the column count
TranslatableGroup::make() ->columns(3) ->schema([...]);
Pre-made configurations
Direction by locale
Automatically sets direction: rtl for Arabic locales, ltr for all others:
TranslatableGroup::configureUsing(function (TranslatableGroup $component) { $component->addDirectionByLocale(); });
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
License
The MIT License (MIT). Please see License File for more information.