在开发多语言网站时,我们通常会使用 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 后台,方便编辑和管理不同语言的内容,提升网站的国际化水平。告别手动编写多语言管理功能的繁琐,将更多精力投入到业务逻辑的开发中。
评论(已关闭)
评论已关闭