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

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

相关推荐
小宋10213 小时前
MCP 工具也有供应链风险:注册中心、签名校验、版本锁定与白名单
开发语言·网络·人工智能·php
damoluomu6 天前
挑 PHP CMS 之前,先学会看它的协议
php
子非鱼a6 天前
【WEB】Online ToolWEB
php
PHP实战开发录6 天前
Nginx上传大文件为什么报413
nginx·php·开发
damoluomu7 天前
国产企业级 PHP CMS:哪些能免费商用
php
郑州光合科技余经理7 天前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
MyFreeIT7 天前
Android PHP Manual
php
aixingpan7 天前
aixingpan.cn API开发文档:api_docs_trichart_natal_progression_sec_transit2接口指南
前端·php
sbjdhjd7 天前
从日志包含到临时文件竞争:文件包含进阶复盘中的 Docker、Windows 与 Session 限制
网络·安全·web安全·网络安全·数据挖掘·php·rce
daxiangxm7 天前
【趣味休息】“围住小猫在线玩”-“困住小猫”,又回来了
数据结构·人工智能·vscode·github·php