在開發(fā)多語言網(wǎng)站時,我們通常會使用 Spatie 的 laravel-translatable 包來管理翻譯內(nèi)容。然而,將這個包與 Filament 整合,以便在后臺管理界面方便地編輯多語言內(nèi)容,可能會遇到一些挑戰(zhàn)。手動實現(xiàn)這些功能需要編寫大量的代碼,并且容易出錯。幸運的是,filament/spatie-laravel-translatable-plugin 插件的出現(xiàn),極大地簡化了這一過程。
該插件為 filament 提供無縫的 spatie/laravel-translatable 集成,無需編寫大量自定義代碼即可輕松管理多語言內(nèi)容。它提供了一個簡單的配置界面,可以輕松設(shè)置默認的翻譯語言,并在資源和頁面中添加語言切換器。
composer在線學(xué)習(xí)地址:學(xué)習(xí)地址
安裝插件
首先,通過 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()); }
設(shè)置默認語言
通過 defaultLocales() 方法設(shè)置默認的翻譯語言:
use FilamentSpatieLaravelTranslatablePlugin; use FilamentPanel; public function panel(Panel $panel): Panel { return $panel // ... ->plugin( SpatieLaravelTranslatablePlugin::make() ->defaultLocales(['en', 'es']), ); }
準(zhǔn)備 Model
確保你的 Model 類已經(jīng)使用了 spatie/laravel-translatable,并設(shè)置了 translatable 屬性。
準(zhǔn)備 Resource
在你的 Resource 類中使用 FilamentResourcesConcernsTranslatable trait:
use FilamentResourcesConcernsTranslatable; use FilamentResourcesResource; class BlogPostResource extends Resource { use Translatable; // ... }
使 Resource Pages 可翻譯
在 Resource 的 Pages 中,使用對應(yīng)的 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()。
插件優(yōu)勢
- 簡化集成: 無需編寫大量代碼,即可將 spatie/laravel-translatable 集成到 Filament 中。
- 易于配置: 提供簡單的配置界面,方便設(shè)置默認語言和語言切換器。
- 提升效率: 簡化多語言內(nèi)容的管理流程,提高開發(fā)效率。
- 代碼簡潔: 通過使用 trait 和 action,使代碼更加簡潔易懂。
實際應(yīng)用效果
通過使用 filament/spatie-laravel-translatable-plugin 插件,我們可以快速構(gòu)建具有多語言管理功能的 Filament 后臺,方便編輯和管理不同語言的內(nèi)容,提升網(wǎng)站的國際化水平。告別手動編寫多語言管理功能的繁瑣,將更多精力投入到業(yè)務(wù)邏輯的開發(fā)中。