|
|
@@ -7,6 +7,7 @@ use App\Models\Badge;
|
|
7
|
7
|
use App\Models\Project;
|
|
8
|
8
|
use App\Models\Region;
|
|
9
|
9
|
use App\Service\DeepLService;
|
|
|
10
|
+use Filament\Actions\Action;
|
|
10
|
11
|
use Filament\Forms\Components\DatePicker;
|
|
11
|
12
|
use Filament\Forms\Components\FileUpload;
|
|
12
|
13
|
use Filament\Forms\Components\Group;
|
|
|
@@ -182,8 +183,26 @@ class ProjectResource extends Resource
|
|
182
|
183
|
Textarea::make('content')->label('內文')->columnSpanFull(),
|
|
183
|
184
|
])
|
|
184
|
185
|
->locales(['zh_TW', 'en'])
|
|
185
|
|
- ->actions(fn($arguments) => $arguments['locale'] === 'zh_TW' ? [] : [
|
|
186
|
|
- app(DeepLService::class)->createTranslationAction('spaceInfos', ['title', 'content'])
|
|
|
186
|
+ ->actions([
|
|
|
187
|
+ Action::make('translateSpaceInfos')
|
|
|
188
|
+ ->label('翻譯')
|
|
|
189
|
+ ->visible(fn ($arguments) => $arguments['locale'] != 'zh_TW')
|
|
|
190
|
+ ->action(function ($set, $get, $arguments) {
|
|
|
191
|
+ $locale = $arguments['locale'] ?? null;
|
|
|
192
|
+ if (!$locale) {
|
|
|
193
|
+ return;
|
|
|
194
|
+ }
|
|
|
195
|
+
|
|
|
196
|
+ $deepLService = app(DeepLService::class);
|
|
|
197
|
+
|
|
|
198
|
+ foreach(['title', 'content'] as $fieldName) {
|
|
|
199
|
+ $sourceText = $get("{$fieldName}.zh_TW");
|
|
|
200
|
+ if (!empty($sourceText)) {
|
|
|
201
|
+ $translateText = $deepLService->translateWordings($sourceText, $locale);
|
|
|
202
|
+ $set("{$fieldName}.{$locale}", $translateText);
|
|
|
203
|
+ }
|
|
|
204
|
+ }
|
|
|
205
|
+ }),
|
|
187
|
206
|
])
|
|
188
|
207
|
->columnSpanFull()
|
|
189
|
208
|
->id(fn($get) => 'spaceInfos_' . $get('item_key')),
|