requiredLocale ?? app()->getLocale(); // 필수 로케일이 지원 언어에 없으면 첫 번째 언어 사용 if (! in_array($requiredLocale, $allowedLanguages)) { $requiredLocale = $allowedLanguages[0]; } // 필수 로케일 값 검증 $requiredValue = $value[$requiredLocale] ?? null; if (is_null($requiredValue) || (is_string($requiredValue) && trim($requiredValue) === '')) { $fail(__('validation.translatable.current_locale_required', [ 'locale' => $requiredLocale, ])); return; } // 각 언어별 검증 foreach ($value as $lang => $text) { // 지원하지 않는 언어 코드 if (! in_array($lang, $allowedLanguages)) { $fail(__('validation.translatable.unsupported_language', ['lang' => $lang])); return; } // null이거나 빈 문자열이 아닌 경우에만 검증 if ($text !== null && $text !== '') { // 문자열이 아닌 경우 if (! is_string($text)) { $fail(__('validation.translatable.must_be_string', ['lang' => $lang])); return; } $length = mb_strlen($text); // 최소 길이 미달 if ($this->minLength > 0 && $length < $this->minLength) { $fail(__('validation.translatable.min_length', [ 'lang' => $lang, 'min' => $this->minLength, ])); return; } // 최대 길이 초과 if ($length > $this->maxLength) { $fail(__('validation.translatable.max_length', [ 'lang' => $lang, 'max' => $this->maxLength, ])); return; } } } } }