演示
一、安装拓展包outerweb/filament-translatable-fields
composer require outerweb/filament-translatable-fields
配置模型
该套件包含一个名为 HasTranslations 的特性,用于使 Eloquent 模型具备多语言功能。翻译值以 JSON 格式存储,并不需要额外的表来保存这些翻译。
<?phpnamespace App\Models;use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Spatie\Translatable\HasTranslations;class Article extends Model
{use HasFactory,HasTranslations;protected $casts = ['id' => 'integer','category_id' => 'integer',];//数据库中 相关字段需要配置 json 或者 text 数据类型public array $translatable = ['title','desc','content'];public function category(): BelongsTo{return $this->belongsTo(Category::class);}
}
- 将插件添加到所需的 Filament 面板中
use Outerweb\FilamentTranslatableFields\Filament\Plugins\FilamentTranslatableFieldsPlugin;class FilamentPanelProvider extends PanelProvider
{public function panel(Panel $panel): Panel{return $panel// ...->plugins([FilamentTranslatableFieldsPlugin::make(),]);}
}
- 您可以设置指定支持的区域:
use Outerweb\FilamentTranslatableFields\Filament\Plugins\FilamentTranslatableFieldsPlugin;class FilamentPanelProvider extends PanelProvider
{public function panel(Panel $panel): Panel{return $panel// ...->plugins([FilamentTranslatableFieldsPlugin::make()->supportedLocales(['zh_CN' => '中文','en' => 'English',]),]);}
}
- 默认情况下,如果未指定 locales,那么软件包将使用 app.locale 中的默认配置
- 用法
你可以将
->translatable()
添加到任何你想翻译的字段。
use Filament\Forms\Components\TextInput;TextInput::make('title')->label('标题')->translatable(),
- 动态禁用翻译
如果要动态禁用翻译,可以将
->translatable()
函数的第一个参数设置为true
或false
。
use Filament\Forms\Components\TextInput;TextInput::make('title')->label('标题')->translatable(false),
- 覆盖区域设置
如果要覆盖特定字段上的区域设置,可以通过
->translatable()
函数的第二个参数来设置区域。
use Filament\Forms\Components\TextInput;TextInput::make('title')->label('标题')->translatable(true, ['en' => 'English', 'nl' => 'Dutch', 'fr' => 'French']),
- 设置指定区域的验证规则
您可以使用
->translatable()
函数的第三个参数来添加指定区域的验证规则
use Filament\Forms\Components\TextInput;TextInput::make('name')->label('Name')->translatable(true, null, ['en' => ['required', 'string', 'max:255'],'nl' => ['nullable', 'string', 'max:255'],]);
注意:
此包outerweb/filament-translatable-fields
将用组件 Filament\Forms\Components\Tabs
替换原始字段。此组件将呈现每个 locale
的原始字段。
在调用 ->translatable()
之前添加的所有链式方法都使用原始字段。
在调用 ->translatable()
之后添加的所有链接方法都使用Filament\Forms\Components\Tabs
组件。
所有功能具体详细使用文档,请点击此链接查看