PHP code example of levgenij / filament-translatable

1. Go to this page and download the library: Download levgenij/filament-translatable library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

levgenij / filament-translatable example snippets




namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Levgenij\LaravelTranslatable\Translatable;

class Category extends Model
{
    use Translatable;

    protected $fillable = [
        'parent_id',
        'is_active',
        'sort',
        // Translatable fields must also be in fillable
        'title',
        'slug',
        'description',
    ];

    /**
     * Translatable attributes.
     */
    public array $translatable = [
        'title',
        'slug',
        'description',
        'meta_title',
        'meta_description',
    ];
}



namespace App\Filament\Resources;

use Filament\Schemas\Schema;
use Filament\Schemas\Components\Section;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\Toggle;
use Filament\Forms\Components\Select;
use Filament\Resources\Resource;
use Levgenij\FilamentTranslatable\Concerns\TranslatableResource;

class CategoryResource extends Resource
{
    use TranslatableResource;

    protected static ?string $model = Category::class;

    public static function form(Schema $schema): Schema
    {
        return $schema->components([
            Section::make()->schema([
                // Translatable fields (detected from $model->translatable)
                TextInput::make('title')
                    ->label('Title')
                    ->



namespace App\Filament\Resources\CategoryResource\Pages;

use App\Filament\Resources\CategoryResource;
use Filament\Resources\Pages\CreateRecord;
use Levgenij\FilamentTranslatable\Concerns\HasTranslatableFields;

class CreateCategory extends CreateRecord
{
    use HasTranslatableFields;

    protected static string $resource = CategoryResource::class;
}



namespace App\Filament\Resources\CategoryResource\Pages;

use App\Filament\Resources\CategoryResource;
use Filament\Resources\Pages\EditRecord;
use Levgenij\FilamentTranslatable\Concerns\HasTranslatableFields;

class EditCategory extends EditRecord
{
    use HasTranslatableFields;

    protected static string $resource = CategoryResource::class;
}



return [
    // Detailed format
    'locales' => [
        'en' => ['name' => 'En', 'native' => 'English'],
        'uk' => ['name' => 'Uk', 'native' => 'українська'],
        'de' => ['name' => 'De', 'native' => 'Deutsch'],
    ],

    // Or simple array format
    'locales' => ['en', 'uk', 'de'],
];

'badge_style' => 'display: inline-flex; padding: 2px 6px; font-size: 10px; background-color: #3b82f6; color: white; border-radius: 4px;',

[
    // Non-translatable
    'is_active' => true,
    'parent_id' => 1,

    // Translatable
    'translations' => [
        'en' => [
            'title' => 'English Title',
            'slug' => 'english-title',
            'description' => 'English description',
        ],
        'uk' => [
            'title' => 'Ukrainian Title',
            'slug' => 'ukrainian-title',
            'description' => 'Ukrainian description',
        ],
    ],
]

class EditCategory extends EditRecord
{
    use HasTranslatableFields;

    protected function mutateFormDataBeforeFill(array $data): array
    {
        // First call parent method to load translations
        $data = parent::mutateFormDataBeforeFill($data);

        // Your additional logic
        $data['custom_field'] = $this->record->computeSomething();

        return $data;
    }
}

class CreateCategory extends CreateRecord
{
    use HasTranslatableFields;

    protected function mutateFormDataBeforeCreate(array $data): array
    {
        // Your logic before creation
        if (! empty($data['image'])) {
            $data['image'] = $this->processImage($data['image']);
        }

        return $data;
    }
}

use Filament\Schemas\Schema;
use Filament\Forms\Components\TextInput;

public static function form(Schema $schema): Schema
{
    return $schema->components([
        TextInput::make('title')
            ->
bash
php artisan vendor:publish --tag=filament-translatable-config

src/
├── Concerns/
│   ├── TranslatableResource.php      # Trait for Resource class
│   └── HasTranslatableFields.php     # Trait for Create/Edit pages
├── Support/
│   └── TranslatableSchemaTransformer.php  # Form schema transformation
└── FilamentTranslatableServiceProvider.php

categories                    categories_translations
┌────┬───────────┬────────┐   ┌─────────────┬────────┬────────────────┬───────┐
│ id │ is_active │ parent │   │ category_id │ locale │ title          │ slug  │
├────┼───────────┼────────┤   ├─────────────┼────────┼────────────────┼───────┤
│ 1  │ true      │ null   │   │ 1           │ en     │ Electronics    │ elec  │
│ 2  │ true      │ 1      │   │ 1           │ uk     │ Електроніка    │ elek  │
└────┴───────────┴────────┘   │ 2           │ en     │ Phones         │ phone │
                              │ 2           │ uk     │ Телефони       │ tel   │
                              └─────────────┴────────┴────────────────┴───────┘