user()->can('localization.translate'), 403); [$record, $config] = $this->resolve($subject, $id); $record->load('translations.locale'); return view('localization::admin.translate', ['record' => $record, 'subject' => $subject, 'config' => $config, 'locales' => Locale::query()->active()->get()]); } public function update(Request $request, string $subject, int $id): RedirectResponse { abort_unless($request->user()->can('localization.translate'), 403); [$record, $config] = $this->resolve($subject, $id); $data = $request->validate(['translations' => ['array'], 'translations.*' => ['array']]); foreach ($data['translations'] ?? [] as $localeCode => $fields) { foreach ($config['fields'] as $field) { $record->setTranslation($field, $localeCode, $fields[$field] ?? null, $request->user()->id); } } return back()->with('success', 'Translations saved.'); } private function resolve(string $subject, int $id): array { $config = config("localization.supported_subjects.$subject"); abort_unless(is_array($config), 404); $record = $config['model']::query()->findOrFail($id); return [$record, $config]; } }