*/ private static array $explanations = [ 'search terms are required' => 'Le champ de recherche est obligatoire.', 'invalid api key' => 'La cle API configuree est invalide ou absente.', 'api key is required' => 'La cle API est requise dans les en-tetes de la requete.', 'not found' => "L'element demande n'a pas ete trouve dans la base de donnees.", 'layout not found' => 'La valeur du parametre LAYOUT est inconnue ou invalide.', 'unknown stkid' => "L'identifiant de stock (STKID) fourni est inconnu.", 'invalid date' => 'Le format de date fourni est invalide.', 'thirdid is required' => "L'identifiant du tiers est obligatoire.", 'jnl is required' => 'Le code journal est obligatoire.', 'number is required' => 'Le numero de document est obligatoire.', 'artid is required' => "L'identifiant de l'article est obligatoire.", ]; /** * Normalise et traduit un message d'erreur API. * * Le champ `error` de l'API peut etre null, une chaine ou un tableau. */ public static function translate(mixed $error): ?string { if ($error === null) { return null; } $message = self::normalize($error); if ($message === '') { return null; } $explanation = self::findExplanation($message); if ($explanation !== null) { return "{$message}\n\nExplication : {$explanation}"; } return $message; } /** * Normalise une valeur error (string ou array) en chaine lisible. */ public static function normalize(mixed $error): string { if (is_array($error)) { return implode(' ', array_map('strval', $error)); } return (string) $error; } private static function findExplanation(string $message): ?string { $lower = mb_strtolower($message); foreach (self::$explanations as $pattern => $explanation) { if (str_contains($lower, $pattern)) { return $explanation; } } return null; } }