novius / laravel-filament-translatable
A Laravel Filament package for translatable fields
Installs: 136
Dependents: 3
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/novius/laravel-filament-translatable
Requires
- php: >=8.2
- filament/filament: ^4.0 | ^5.0
- laravel/framework: ^11.28 | ^12.0
- novius/laravel-translatable: ^2.0.0
Requires (Dev)
- larastan/larastan: ^3.1
- laravel/pint: ^1.10
- orchestra/testbench: ^9.0 | ^10.1
- roave/security-advisories: dev-latest
README
Introduction
This package allows you to manage Laravel Models that use Laravel Translatable in Laravel Filament.
Requirements
- Laravel Filament >= 4
- Laravel >= 11.0
- PHP >= 8.2
Installation
You can install the package via composer:
composer require novius/laravel-filament-translatable
Assets
Next we need to publish the package's assets. We do this by running the following command:
php artisan vendor:publish --provider="Novius\LaravelFilamentTranslatable\LaravelFilamentTranslatableServiceProvider" --tag="public"
Lang files
If you want to customize the lang files, you can publish them with:
php artisan vendor:publish --provider="Novius\LaravelFilamentTranslatable\LaravelFilamentTranslatableServiceProvider" --tag="lang"
Locale Filter
Add the LocaleFilter filter on your Filament Resource.
use Filament\Resources\Resource; use Novius\LaravelFilamentTranslatable\Filament\Tables\Filters\LocaleFilter; class Post extends Resource { public static function table(Table $table): Table { return $table /// ... ->filters([ LocaleFilter::make('locale'), /// ... ]); } }
Locale Column
Add the LocaleColumn column on your Filament Resource.
use Filament\Resources\Resource; use Novius\LaravelFilamentTranslatable\Filament\Tables\Columns\LocaleColumn; class Post extends Resource { public static function table(Table $table): Table { return $table /// ... ->columns([ /// ... LocaleColumn::make('locale'), ]); } }
Locale Input
Add the Locale input on your Filament Resource.
use Filament\Resources\Resource; use Novius\LaravelFilamentTranslatable\Filament\Forms\Components\Locale; class Post extends Resource { public static function form(Form $form): Form { return $form ->schema([ // ... Locale::make('locale') ->required(), // ... ]); } }
Translations Column and features
In your Filament Resource.
use Filament\Resources\Resource; use Novius\LaravelFilamentTranslatable\Filament\Tables\Columns\TranslationsColumn; class Post extends Resource { public static function form(Form $form): Form { return $form ->schema([ Hidden::make('locale_parent_id'), ]); } public static function form(Form $form): Form { return $table // ... ->columns([ // ... TranslationsColumn::make('translations') ->locales(['de', 'en']) // Optional. Restricted the locals displayed on this list ->flagWidth(16) // Optional. Width in pixel of the flags ->onlyMissing() // Optional. Will display only translations missing ->withoutMissing() // Optional. Will display only existing translations , // ... ]); } }
And declare your Create page like this :
<?php use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; use LaravelLang\Locales\Facades\Locales; use Novius\LaravelFilamentPageManager\Filament\PageManagerPlugin; use Novius\LaravelFilamentTranslatable\Filament\Resources\Pages\CreateRecord; class CreatePost extends CreateRecord { public static function getResource(): string { return PageManagerPlugin::getPlugin()->getResource('PostResource'); } protected function getDataFromTranslate(Model $parent, string $locale): array { $data = $parent->attributesToArray(); // Modify data according the parent $data['title'] = $parent->title.' '.Locales::get($locale)->native; $data['slug'] = Str::slug($data['title']); return $data; } }
Lint
Lint your code with Laravel Pint using:
composer run-script lint
Licence
This package is under GNU Affero General Public License v3 or (at your option) any later version.