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();