boxmoe_header_banner_img

Hello! 欢迎来到悠悠畅享网!

文章导读

Filament如何解决SpatieTranslatable的集成难题,提升多语言网站管理效率


avatar
悠悠站长 2025年6月12日 3

在开发多语言网站时,我们通常会使用 Spatie 的 laravel-translatable 包来管理翻译内容。然而,将这个包与 Filament 整合,以便在后台管理界面方便地编辑多语言内容,可能会遇到一些挑战。手动实现这些功能需要编写大量的代码,并且容易出错。幸运的是,filament/spatie-laravel-translatable-plugin 插件的出现,极大地简化了这一过程。

该插件为 filament 提供无缝的 spatie/laravel-translatable 集成,无需编写大量自定义代码即可轻松管理多语言内容。它提供了一个简单的配置界面,可以轻松设置默认的翻译语言,并在资源和页面中添加语言切换器。

Composer在线学习地址:学习地址

安装插件

首先,通过 Composer 安装该插件:

composer require filament/spatie-laravel-translatable-plugin:"^3.2" -W

配置插件

将插件添加到 Filament 面板的配置中:

use FilamentSpatieLaravelTranslatablePlugin; use FilamentPanel;  public function panel(Panel $panel): Panel {     return $panel         // ...         ->plugin(SpatieLaravelTranslatablePlugin::make()); }

设置默认语言

通过 defaultLocales() 方法设置默认的翻译语言:

use FilamentSpatieLaravelTranslatablePlugin; use FilamentPanel;  public function panel(Panel $panel): Panel {     return $panel         // ...         ->plugin(             SpatieLaravelTranslatablePlugin::make()                 ->defaultLocales(['en', 'es']),         ); }

准备 Model

确保你的 Model 类已经使用了 spatie/laravel-translatable,并设置了 translatable 属性。

准备 Resource

在你的 Resource 类中使用 FilamentResourcesConcernsTranslatable trait:

use FilamentResourcesConcernsTranslatable; use FilamentResourcesResource;  class BlogPostResource extends Resource {     use Translatable;      // ... }

使 Resource Pages 可翻译

在 Resource 的 Pages 中,使用对应的 Translatable trait,并添加 LocaleSwitcher header action:

use FilamentActions; use FilamentResourcesPagesListRecords;  class ListBlogPosts extends ListRecords {     use ListRecordsConcernsTranslatable;      protected function getHeaderActions(): array     {         return [             ActionsLocaleSwitcher::make(),             // ...         ];     }      // ... }

对于 CreateRecord、EditRecord 和 ViewRecord 页面,也需要做类似的处理。

翻译 Relation Managers

如果你的 Resource 中使用了 Relation Managers,也需要进行翻译配置。首先,在 Relation Manager 类中使用 FilamentResourcesRelationManagersConcernsTranslatable trait:

use FilamentResourcesRelationManagersConcernsTranslatable; use FilamentResourcesRelationManagersRelationManager;  class BlogPostsRelationManager extends RelationManager {     use Translatable;      // ... }

然后在 table() 方法的 headerActions 中添加 TablesActionsLocaleSwitcher::make()。

插件优势

  • 简化集成: 无需编写大量代码,即可将 spatie/laravel-translatable 集成到 Filament 中。
  • 易于配置: 提供简单的配置界面,方便设置默认语言和语言切换器。
  • 提升效率: 简化多语言内容的管理流程,提高开发效率。
  • 代码简洁: 通过使用 trait 和 action,使代码更加简洁易懂。

实际应用效果

通过使用 filament/spatie-laravel-translatable-plugin 插件,我们可以快速构建具有多语言管理功能的 Filament 后台,方便编辑和管理不同语言的内容,提升网站的国际化水平。告别手动编写多语言管理功能的繁琐,将更多精力投入到业务逻辑的开发中。



评论(已关闭)

评论已关闭