当前位置: 首页 > article >正文

Laravel Filament 如何配置多语言支持

演示

在这里插入图片描述

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

composer require outerweb/filament-translatable-fields

配置模型

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

<?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 面板中
use Outerweb\FilamentTranslatableFields\Filament\Plugins\FilamentTranslatableFieldsPlugin;
 
class FilamentPanelProvider extends PanelProvider
{
    public function panel(Panel $panel): Panel
    {
        return $panel
            // ...
            ->plugins([
                FilamentTranslatableFieldsPlugin::make(),
            ]);
    }
}
  1. 您可以设置指定支持的区域:
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() 添加到任何你想翻译的字段。

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

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

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

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


http://www.kler.cn/news/341264.html

相关文章:

  • HalconDotNet实现分水岭图像分割算法详解
  • Leetcode 下一个排列
  • contact form 7设置方法与详细步骤
  • 网页前端开发之Javascript入门篇(9/9):对象
  • 自动化测试 | alert处理
  • 【深度学习总结】热力图-Grad-CAM使用
  • [持续更新]程序员每天会阅读哪些技术网站(带链接)来提升自己?
  • 谁能跟我比操作系统?
  • Python | Leetcode Python题解之第459题重复的子字符串
  • Nacos-Feign-Gateway-SpringCloud微服务
  • 本田汽车投资SiLC Technologies:携手共促自动驾驶技术新飞跃
  • Python-Pandas
  • java算法OJ(2)链表
  • CUDA、Pytorch、Pycharm的安装与配置
  • 017 平台属性[属性分组、规格参数、销售属性]
  • Android 10.0 修改Systemui三键导航栏虚拟按键颜色功能实现
  • 链表Set_LinkList(并集)
  • 开源城市运动预约的工具类小程序源码
  • 【题目全解】ACGO排位赛#13
  • 电脑屏保设置教程 好看的电脑屏保应该怎么设置?