Laravel Filament 如何配置多语言支持

演示

一、安装拓展包outerweb/filament-translatable-fields

shell 复制代码
composer require outerweb/filament-translatable-fields

配置模型

该套件包含一个名为 HasTranslations 的特性,用于使 Eloquent 模型具备多语言功能。翻译值以 JSON 格式存储,并不需要额外的表来保存这些翻译。

php 复制代码
<?php

namespace 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);
    }
}
  1. 将插件添加到所需的 Filament 面板中
php 复制代码
use Outerweb\FilamentTranslatableFields\Filament\Plugins\FilamentTranslatableFieldsPlugin;
 
class FilamentPanelProvider extends PanelProvider
{
    public function panel(Panel $panel): Panel
    {
        return $panel
            // ...
            ->plugins([
                FilamentTranslatableFieldsPlugin::make(),
            ]);
    }
}
  1. 您可以设置指定支持的区域:
php 复制代码
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',
                    ]),
            ]);
    }
}
  1. 默认情况下,如果未指定 locales,那么软件包将使用 app.locale 中的默认配置
  • 用法

你可以将 ->translatable() 添加到任何你想翻译的字段。

php 复制代码
use Filament\Forms\Components\TextInput;
 
TextInput::make('title')
    ->label('标题')
    ->translatable(),
  • 动态禁用翻译

如果要动态禁用翻译,可以将 ->translatable() 函数的第一个参数设置为 truefalse

php 复制代码
use Filament\Forms\Components\TextInput;
 
TextInput::make('title')
    ->label('标题')
    ->translatable(false),
  • 覆盖区域设置

如果要覆盖特定字段上的区域设置,可以通过 ->translatable() 函数的第二个参数来设置区域。

php 复制代码
use Filament\Forms\Components\TextInput;
 
TextInput::make('title')
    ->label('标题')
    ->translatable(true, ['en' => 'English', 'nl' => 'Dutch', 'fr' => 'French']),
  • 设置指定区域的验证规则

您可以使用 ->translatable() 函数的第三个参数来添加指定区域的验证规则

php 复制代码
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组件。

所有功能具体详细使用文档,请点击此链接查看

相关推荐
Jason-河山35 分钟前
PHP中的HTTP请求:Apache客户端的高效应用
http·php·apache
2401_857636394 小时前
宠物咖啡馆在线体验:SpringBoot技术的应用
spring boot·php·宠物
Xerale5 小时前
Laravel Admin 中的 “Array to String Conversion“ 问题及其解决方法
前端·数据库·笔记·php·laravel
不是二师兄的八戒6 小时前
解析文件(支持 TXT、PDF、JPG、PNG、DOCX),并提取体检数据中的数值
java·php
Da1NtY09267 小时前
[CTF夺旗赛] CTFshow Web13-14 详细过程保姆级教程~
web安全·网络安全·php·网络攻击模型
夜色呦9 小时前
Spring Boot实现新闻个性化推荐
服务器·spring boot·php
ac-er888821 小时前
PHP反射机制
开发语言·php
luthane1 天前
python 实现dijkstra迪杰斯特拉算法
python·算法·php
hadagaga1 天前
Session反序列化漏洞解析
网络安全·php