'中文', 'en' => '英文', 'vi' => '越南语']; public static function parse($input, int $titleLimit, int $contentLimit, bool $subtitle = false): array { if (!is_array($input) || array_diff(array_keys($input), array_keys(self::LANGUAGES))) { self::invalid('translations', '请按zh/en/vi提交多语言内容'); } $result = []; foreach (self::LANGUAGES as $language => $_) { if (!array_key_exists($language, $input)) continue; $block = $input[$language]; if (!is_array($block)) self::invalid('translations.' . $language, '语言内容必须为对象'); $data = Validator::make($block, [ 'title' => ['nullable', 'string', 'max:' . $titleLimit], 'content' => ['nullable', 'string', 'max:' . $contentLimit], 'subtitle' => ['nullable', 'string', 'max:500'], ])->validate(); if (trim((string) ($data['content'] ?? '')) === '') continue; if (trim((string) ($data['title'] ?? '')) === '') self::invalid('translations.' . $language . '.title', '已填写正文的语言必须填写标题'); $result[$language] = ['title' => trim($data['title']), 'content' => $data['content']]; if ($subtitle) $result[$language]['subtitle'] = (string) ($data['subtitle'] ?? ''); } if (!$result) self::invalid('translations', '至少填写一个语言的标题和正文'); return $result; } public static function invalid(string $field, string $message): void { throw ValidationException::withMessages([$field => $message]); } }