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() 函数的第一个参数设置为 true或 false。

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组件。

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

相关推荐
东鹏特饮1 天前
系统运维(传统/通用运维)面试题
开发语言·php
多客:duokelijie1 天前
代练订单系统选型思路:跨品类游戏接入、订单分层管理、自动结算逻辑拆解!
数据库·mysql·微信小程序·前端框架·uni-app·php·持续部署
从琳开始9891 天前
网络原理入门(二)------OSI七层模型?TCP/IP五层(四层)模型原来是这样的
java·网络·tcp/ip·java-ee·php
BingoGo1 天前
PHP 标准库的价值远不止少写几行代码
后端·php
JaguarJack1 天前
PHP 标准库的价值远不止少写几行代码
后端·php·服务端
evoxwht2 天前
给 CRMEB V8 接一个 S3 兼容存储驱动
php
北京中科新远科技2 天前
高速交换机端口预算怎么做?下行、上联、拆分和冗余计算框架
开发语言·php
其实防守也摸鱼2 天前
信创安全竞赛知识总结与题库
大数据·网络·人工智能·算法·安全·php
可涵不会debug2 天前
PHP2Shell 爆发一周后:CVE-2026-109618/109619 自查、修复与防护实录
安全·php·云安全·waf·phpshell
一支蜉蝣2 天前
Day26 XD安全学习笔记--PHP 应用&模版引用&Smarty渲染&MVC 模型&数据联动&RCE 安全
笔记·网络安全·html·php