PHP code example of huuhadev / filament-translatable

1. Go to this page and download the library: Download huuhadev/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/ */

    

huuhadev / filament-translatable example snippets


use HuuHaDev\FilamentTranslatable\FilamentTranslatablePlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->plugins([
            FilamentTranslatablePlugin::make()
                ->locales([
                    'en' => asset('/vendor/filament-translatable/assets/flags/gb.svg'),
                    'ar' => asset('/vendor/filament-translatable/assets/flags/ar.svg')
                ])
                ->onlyFlag() // Default: false
                ->rounded(false) // Default: true
                ->renderHook('panels::global-search.before') // Default: 'panels::global-search.after'
                ->displayLocale('ar') // Display locale as an optional parameter to get the language names in a specific language. If no display locale is specified, the application's current locale is used.
                ->labels(['en' => 'English (EN)', 'ar' => 'Arabic (AR)']) // Custom text labels for each locale that your application supports. Default use PHP's native function locale_get_display_name()
                ->size('lg') // By default, the avatar will be "medium" size. You can set the size to either sm, md, or lg using the size attribute: `w-8 h-8`
                ->buttonClasses('rounded-full') // Default: 'rounded-lg',
        ])
}

TextInput::make('name')
    ->translator('Auto translate') // This line to make field translatable,

use HuuHaDev\FilamentTranslatable\Concerns\ResourcesTranslatable;
use Filament\Resources\Resource;

class PostResource extends Resource
{
    use ResourcesTranslatable;
    
    // ...
}

use Filament\Resources\Pages\ListRecords;
use HuuHaDev\FilamentTranslatable\Actions\SelectLocale;
use HuuHaDev\FilamentTranslatable\Concerns\ListRecordsTranslatable;

class ListPosts extends ListRecords
{
    use ListRecordsTranslatable;
    
    protected function getHeaderActions(): array
    {
        return [
            SelectLocale::make(),
            // ...
        ];
    }
    
    // ...
}

use Filament\Resources\Pages\ManageRecords;
use HuuHaDev\FilamentTranslatable\Actions\SelectLocale;
use HuuHaDev\FilamentTranslatable\Concerns\ManageRecordsTranslatable;

class ManageAuthors extends ManageRecords
{
    use ManageRecordsTranslatable;
    
    protected function getHeaderActions(): array
    {
        return [
            SelectLocale::make(),
            // ...
        ];
    }
    
    // ...
}

use Filament\Resources\Pages\CreateRecord;
use HuuHaDev\FilamentTranslatable\Actions\SelectLocale;
use HuuHaDev\FilamentTranslatable\Concerns\CreateRecordTranslatable;

class CreateBlogPost extends CreateRecord
{
    use CreateRecordTranslatable;
    
    protected function getHeaderActions(): array
    {
        return [
            SelectLocale::make(),
            // ...
        ];
    }
    
    // ...
}

use Filament\Resources\Pages\EditRecord;
use HuuHaDev\FilamentTranslatable\Actions\SelectLocale;
use HuuHaDev\FilamentTranslatable\Concerns\EditRecordTranslatable;

class EditBlogPost extends EditRecord
{
    use EditRecordTranslatable;
    
    protected function getHeaderActions(): array
    {
        return [
            SelectLocale::make(),
            // ...
        ];
    }
    
    // ...
}

use Filament\Resources\Pages\ViewRecord;
use HuuHaDev\FilamentTranslatable\Actions\SelectLocale;
use HuuHaDev\FilamentTranslatable\Concerns\ViewRecordTranslatable;

class ViewBlogPost extends ViewRecord
{
    use ViewRecordTranslatable;
    
    protected function getHeaderActions(): array
    {
        return [
            SelectLocale::make(),
            // ...
        ];
    }
    
    // ...
}

use Filament\Resources\Resource;
use HuuHaDev\FilamentTranslatable\Concerns\ResourceTranslatable;

class PostResource extends Resource
{
    use ResourceTranslatable;
    
    // ...
    
    public static function getTranslatableLocales(): array
    {
        return ['en', 'fr'];
    }
}

use Filament\Resources\RelationManagers\RelationManager;
use HuuHaDev\FilamentTranslatable\Concerns\RelationManagersTranslatable;

class PostsRelationManager extends RelationManager
{
    use RelationManagersTranslatable;
    
    // ...
}

use Filament\Tables\Table;
use HuuHaDev\FilamentTranslatable\Actions\Tables\TableSelectLocale;

public function table(Table $table): Table
{
    return $table
        ->columns([
            // ...
        ])
        ->headerActions([
            // ...
            TableSelectLocale::make(),
        ]);
}

use Filament\Resources\RelationManagers\RelationManager;
use Livewire\Attributes\Reactive;
use HuuHaDev\FilamentTranslatable\Concerns\RelationManagersTranslatable;

class PostsRelationManager extends RelationManager
{
    use RelationManagersTranslatable;
    
    #[Reactive]
    public ?string $activeLocale = null;
    
    // ...
}

use Filament\Resources\RelationManagers\RelationManager;
use HuuHaDev\FilamentTranslatable\Concerns\RelationManagersTranslatable;

class PostsRelationManager extends RelationManager
{
    use RelationManagersTranslatable;
    
    // ...
    
    public function getTranslatableLocales(): array
    {
        return ['en', 'ar'];
    }
}

$newsItem = new NewsItem;
$newsItem
   ->setTranslation('name', 'en', 'Name in English')
   ->setTranslation('name', 'nl', 'Naam in het Nederlands')
   ->save();

$newsItem->name; // Returns 'Name in English' given that the current app locale is 'en'
$newsItem->getTranslation('name', 'nl'); // returns 'Naam in het Nederlands'

app()->setLocale('nl');

$newsItem->name; // Returns 'Naam in het Nederlands'

// If you want to query records based on locales, you can use the `whereLocale` and `whereLocales` methods.

NewsItem::whereLocale('name', 'en')->get(); // Returns all news items with a name in English

NewsItem::whereLocales('name', ['en', 'nl'])->get(); // Returns all news items with a name in English or Dutch

// Returns all news items that has name in English with value `Name in English` 
NewsItem::query()->whereJsonContainsLocale('name', 'en', 'Name in English')->get();

// Returns all news items that has name in English or Dutch with value `Name in English` 
NewsItem::query()->whereJsonContainsLocales('name', ['en', 'nl'], 'Name in English')->get();

// The last argument is the "operand" which you can tweak to achieve something like this:

// Returns all news items that has name in English with value like `Name in...` 
NewsItem::query()->whereJsonContainsLocale('name', 'en', 'Name in%', 'like')->get();

// Returns all news items that has name in English or Dutch with value like `Name in...` 
NewsItem::query()->whereJsonContainsLocales('name', ['en', 'nl'], 'Name in%', 'like')->get();
bash
php artisan filament-translatable:install
bash
php artisan vendor:publish --tag=filament-translatable-views
bash
php artisan vendor:publish --tag=filament-translatable-config
bash
php artisan vendor:publish --tag=filament-translatable-translations