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

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

相关推荐
桃子酱紫君2 小时前
华为配置篇-BGP实验
开发语言·华为·php
fakaifa6 小时前
beikeshop多商户跨境电商独立站最新版v1.6.0版本源码
前端·小程序·uni-app·php·beikeshop多商户·beikeshop跨境电商
Taichi呀8 小时前
PHP语言基础
android·开发语言·php
智想天开16 小时前
8.集成模板引擎
php
Json20113151 天前
Swoole 的 Hyperf 框架和 Go 的 Gin 框架高并发原理以及技术实现对比分析
网络·php·gin·swoole
Python大数据分析@1 天前
python 常用的6个爬虫第三方库
爬虫·python·php
我是唐青枫1 天前
php8属性注解使用教程
php
斯~内克1 天前
鸿蒙网络通信全解析:从网络状态订阅到高效请求实践
网络·php·harmonyos
最美不过下雨天啊1 天前
记一个很简单的错误
php·phpstudy·pdo扩展
北极象1 天前
用C实现一个最简单的正则表达式引擎
c语言·正则表达式·php