Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonsoir à tous,
Voilà, je viens de télécharger la version 1.10.3 de Zend Framework.
Mais voilà, j'ai un petit soucis.
Avec "Zend_Filter_Input", je n'arrive plus à personnaliser les messages d'erreurs.
Aprés avoir lu, la nouvelle documentation, j'ai tenté de faire fonctionner la traduction pour personnaliser mes messages d'erreurs. Voilà ce petit bout de code:
if(!empty($_POST['submit'])): $filtres = array('*' => 'StringTrim','*' => 'StringToLower'); $validateurs = array( 'month' => array( new Zend_Validate_Between(1, 12) ) ); $translate = new Zend_Translate_Adapter_Array(array( Zend_Validate_Between::NOT_BETWEEN =>'Le mois %value% doit être compris entre %min% and %max%', Zend_Validate_Between::NOT_BETWEEN_STRICT => ''Le mois %value% doit être strictement compris entre %min% and %max% ' ), 'fr' ); $input = new Zend_Filter_Input($filtres, $validateurs, $_POST/*, $options*/); $input->setTranslator($translate); Zend_Debug::dump($input->getMessages()); exit; endif;
En affichant "$input->getMessages()" les messages d'erreurs s'affichent toujours en anglais (texte original) et non pas avec le message personnalisé.
Exemple : array(1) { ["month"] => array(1) { ["notBetween"] => string(47) "'hjgh' is not between '1' and '12', inclusively" } }
Quelqu'un peut-il m'aider à comprendre comment faire pour afficher les messages correspondant à l'erreur indiquée ???
En vous remerciant d'avance.
Hors ligne
Pour traduire les messages d'erreur fais comme cela :
[*] Créer un dossier languages/ dans application/
[*] Créer un fichier .tmx (=>Translation Memory eXchange, fichier de traduction type xml), par exemple : traderreurfr.tmx
[*] Après l'autoloader ajouter :
// Traduction des erreurs $translate = new Zend_Translate('tmx',APPLICATION_PATH .'/languages/traderreurfr.tmx', null, array('scan' => Zend_Translate::LOCALE_FILENAME)); $translate->setLocale('fr_FR'); Zend_Registry::set('Zend_Translate', $translate);
[*] Remplir le fichier .tmx (voir ci-dessous)
Voila, si j'ai pas bien compris ta question ça servira à quelqu'un d'autre xD
Exemple fichier .tmx
<?xml version="1.0" encoding="UTF-8"?> <tmx version="1.4"> <body> <tu tuid='notAlnum'> <tuv xml:lang="fr"><seg><![CDATA['%value%' ne contient pas que des lettres et/ou des chiffres.]]></seg></tuv> </tu> <tu tuid='notAlpha'> <tuv xml:lang="fr"><seg><![CDATA['%value%' ne contient pas que des lettres.]]></seg></tuv> </tu> <tu tuid='notBetween'> <tuv xml:lang="fr"><seg><![CDATA['%value%' n'est pas compris entre %min% et %max% inclus.]]></seg></tuv> </tu> </body> </tmx>
Dernière modification par shadypierre (21-04-2010 02:38:48)
Hors ligne
Re !
Peut-être que je me suis mal exprimé. Ce n'est pas l'écriture des traductions qui me pose problème mais comment récupérer la traduction du message en fonction de l'erreur trouvé.
Je reprend l'exemple ci-dessus :
Si $_POST['month'] = '13', si aucune traduction ajouté on m'affichera le message d'erreur suivant :
Zend_Debug::dump($input->getMessages()); /* array(1) { ["month"] => array(1) { ["notBetween"] => string(45) "'13' is not between '1' and '12', inclusively" } } */
Mais moi je souhaite qu'en ajoutant la traduction en français, lorsque que je mets pour $_POST['month'] = '13', on m'affiche le message d'erreur traduit et correspondant, soit :
Zend_Debug::dump($input->getMessages()); /* array(1) { ["month"] => array(1) { ["notBetween"] => string(48) "'13' n'est pas compris entre '1' et '12' inclus." } } */
J'espère avoir été assez clair cette fois-ci. Vous savez comment résoudre ce problème en vous remerciant d'avance.
Hors ligne
Pages: 1