Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Actuellement, la seule méthode que j'ai trouvé pour traduire en français les messages d'erreurs d'un formulaire est la suivante :
$sizeValidator = new Zend_Validate_File_Size(5242880); $sizeValidator->setMessage('Le fichier \'%value%\' est trop gros', Zend_Validate_File_Size::TOO_BIG);
Cette méthode n'est pas pratique puisqu'il faut pour chaque champ préciser toutes les erreurs qu'il peut générer.
N'existe-t-il pas une méthode permettant de mettre tous les messages d'erreurs traduit au même endroit dans une liste et de l'appliquer à tous les champs d'un formulaire voir même à plusieurs formulaires.
Dernière modification par peyot (19-06-2009 15:36:11)
Hors ligne
Tu peux gérer cela en passant tous les messages d'erreur à Zend_Translate. Cet objet est transmis a Zend_Form si il est dans les registres (à vérifier)
Hors ligne
Oui, je suis bien d'accord qu'il doit être possible de faire cela avec Zend_Translate. Cela pose malgré tout un problème : Si un jour j'utilise une version plus récente du Framework et que le texte des messages d'erreurs a été modifié, ma traduction ne sera plus fonctionnelle.
C'est que même bête étant donné que chaque message d'erreur à un identifiant unique (exemple : "Zend_Validate_File_Size::TOO_BIG"). Étonnant qu'on me puisse pas faire un tableau qui associe à chaque identifiant un message d'erreur personnalisé en français.
Dernière modification par peyot (19-06-2009 10:23:33)
Hors ligne
mon fichier de traduction des messages d'erreurs est le suivant :
<?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> <tu tuid='notBetweenStrict'> <tuv xml:lang="fr"><seg><![CDATA['%value%' n'est pas compris entre %min% et %max% exclus.]]></seg></tuv> </tu> <tu tuid='dateNotYYYY-MM-DD'> <tuv xml:lang="fr"><seg><![CDATA['%value%' n'est pas une date au format AAAA-MM-JJ (exemple : 2000-12-31).]]></seg></tuv> </tu> <tu tuid='dateInvalid'> <tuv xml:lang="fr"><seg><![CDATA['%value%' n'est pas une date valide.]]></seg></tuv> </tu> <tu tuid='dateFalseFormat'> <tuv xml:lang="fr"><seg><![CDATA['%value%' n'est pas une date valide au format JJ/MM/AAAA (exemple : 31/12/2000).]]></seg></tuv> </tu> <tu tuid='notDigits'> <tuv xml:lang="fr"><seg><![CDATA['%value%' ne contient pas que des chiffres.]]></seg></tuv> </tu> <tu tuid='emailAddressInvalid'> <tuv xml:lang="fr"><seg><![CDATA['%value%' n'est pas une adresse mail valide selon le format adresse@domaine.]]></seg></tuv> </tu> <tu tuid='emailAddressInvalidHostname'> <tuv xml:lang="fr"><seg><![CDATA['%hostname%' n'est pas un domaine valide pour l'adresse mail '%value%'.]]></seg></tuv> </tu> <tu tuid='emailAddressInvalidMxRecord'> <tuv xml:lang="fr"><seg><![CDATA['%hostname%' n'accepte pas l'adresse mail '%value%'.]]></seg></tuv> </tu> <tu tuid='emailAddressDotAtom'> <tuv xml:lang="fr"><seg><![CDATA['%localPart%' ne respecte pas le format dot-atom.]]></seg></tuv> </tu> <tu tuid='emailAddressQuotedString'> <tuv xml:lang="fr"><seg><![CDATA['%localPart%' ne respecte pas le format quoted-string.]]></seg></tuv> </tu> <tu tuid='emailAddressInvalidLocalPart'> <tuv xml:lang="fr"><seg><![CDATA['%localPart%' n'est pas une adresse individuelle valide.]]></seg></tuv> </tu> <tu tuid='notFloat'> <tuv xml:lang="fr"><seg><![CDATA['%value%' n'est pas un nombre décimal.]]></seg></tuv> </tu> <tu tuid='notGreaterThan'> <tuv xml:lang="fr"><seg><![CDATA['%value%' n'est pas strictement supérieur à '%min%'.]]></seg></tuv> </tu> <tu tuid='notInt'> <tuv xml:lang="fr"><seg><![CDATA['%value%' n'est pas un nombre entier.]]></seg></tuv> </tu> <tu tuid='notLessThan'> <tuv xml:lang="fr"><seg><![CDATA['%value%' n'est pas strictement inférieur à '%max%'.]]></seg></tuv> </tu> <tu tuid='isEmpty'> <tuv xml:lang="fr"><seg><![CDATA[Ce champ est vide : vous devez le compléter.]]></seg></tuv> </tu> <tu tuid='stringEmpty'> <tuv xml:lang="fr"><seg><![CDATA[Ce champ est vide : vous devez le compléter.]]></seg></tuv> </tu> <tu tuid='regexNotMatch'> <tuv xml:lang="fr"><seg><![CDATA['%value%' ne respecte pas le format '%pattern%'.]]></seg></tuv> </tu> <tu tuid='stringLengthTooShort'> <tuv xml:lang="fr"><seg><![CDATA['%value%' fait moins de %min% caractères.]]></seg></tuv> </tu> <tu tuid='stringLengthTooLong'> <tuv xml:lang="fr"><seg><![CDATA['%value%' fait plus de %max% caractères.]]></seg></tuv> </tu> <tu tuid='notSame'> <tuv xml:lang="fr"><seg><![CDATA[Les informations ne concordent pas]]></seg></tuv> </tu> <tu tuid='missingToken'> <tuv xml:lang="fr"><seg><![CDATA[Impossible de vérifier la concordance, valeur manquante.]]></seg></tuv> </tu> <tu tuid='hostnameIpAddressNotAllowed'> <tuv xml:lang="fr"><seg><![CDATA['%value%' semble être une adresse IP, ceci n'est pas autorisée]]></seg></tuv> </tu> <tu tuid='hostnameUnknownTld'> <tuv xml:lang="fr"><seg><![CDATA['%value%' semble être un DNS cependant le TLD est inconnu]]></seg></tuv> </tu> <tu tuid='hostnameDashCharacter'> <tuv xml:lang="fr"><seg><![CDATA['%value%' semble être un DNS mais il contient un tiret (-) à une position invalide]]></seg></tuv> </tu> <tu tuid='hostnameInvalidHostnameSchema'> <tuv xml:lang="fr"><seg><![CDATA['%value%' appears to be a DNS hostname but cannot match against hostname schema for TLD '%tld%']]></seg></tuv> </tu> <tu tuid='hostnameUndecipherableTld'> <tuv xml:lang="fr"><seg><![CDATA['%value%' appears to be a DNS hostname but cannot extract TLD part]]></seg></tuv> </tu> <tu tuid='hostnameInvalidHostname'> <tuv xml:lang="fr"><seg><![CDATA['%value%' does not match the expected structure for a DNS hostname]]></seg></tuv> </tu> <tu tuid='hostnameInvalidLocalName'> <tuv xml:lang="fr"><seg><![CDATA['%value%' does not appear to be a valid local network name]]></seg></tuv> </tu> <tu tuid='hostnameLocalNameNotAllowed'> <tuv xml:lang="fr"><seg><![CDATA['%value%' appears to be a local network name but local network names are not allowed]]></seg></tuv> </tu> </body> </tmx>
En ouvrant, une classe Zend_Validate_* tu verras que les clés utilisées sont les valeurs des constantes et non pas le message, il n'y a donc pas de soucis. Au pire, si y a un ajout de constante, tu rajoutes la correspondance clé message traduit.
Hors ligne
D' accord ! J'avais pas compris qu'il était possible de faire cela avec Zend translate (j'avais pas du lire la doc assez attentivement).
En fait, il y a juste a rajouter en début de formulaire :
$translate = new Zend_Translate('tmx',APPLICATION_PATH .'/languages/messagesfr.tmx','fr'); Zend_Validate_Abstract::setDefaultTranslator($translate);
C'est exactement ce que je cherchais. Merci beaucoup pour le fichier de traduction.
J'en profite pour retransmettre le fichier avec en plus quelques traductions qui manquaient pour mon application (concernant le champ 'file'). Si ça intéresse quelqu'un :
<?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> <tu tuid='notBetweenStrict'> <tuv xml:lang="fr"><seg><![CDATA['%value%' n'est pas compris entre %min% et %max% exclus.]]></seg></tuv> </tu> <tu tuid='dateNotYYYY-MM-DD'> <tuv xml:lang="fr"><seg><![CDATA['%value%' n'est pas une date au format AAAA-MM-JJ (exemple : 2000-12-31).]]></seg></tuv> </tu> <tu tuid='dateInvalid'> <tuv xml:lang="fr"><seg><![CDATA['%value%' n'est pas une date valide.]]></seg></tuv> </tu> <tu tuid='dateFalseFormat'> <tuv xml:lang="fr"><seg><![CDATA['%value%' n'est pas une date valide au format JJ/MM/AAAA (exemple : 31/12/2000).]]></seg></tuv> </tu> <tu tuid='notDigits'> <tuv xml:lang="fr"><seg><![CDATA['%value%' ne contient pas que des chiffres.]]></seg></tuv> </tu> <tu tuid='emailAddressInvalid'> <tuv xml:lang="fr"><seg><![CDATA['%value%' n'est pas une adresse mail valide selon le format adresse@domaine.]]></seg></tuv> </tu> <tu tuid='emailAddressInvalidHostname'> <tuv xml:lang="fr"><seg><![CDATA['%hostname%' n'est pas un domaine valide pour l'adresse mail '%value%'.]]></seg></tuv> </tu> <tu tuid='emailAddressInvalidMxRecord'> <tuv xml:lang="fr"><seg><![CDATA['%hostname%' n'accepte pas l'adresse mail '%value%'.]]></seg></tuv> </tu> <tu tuid='emailAddressDotAtom'> <tuv xml:lang="fr"><seg><![CDATA['%localPart%' ne respecte pas le format dot-atom.]]></seg></tuv> </tu> <tu tuid='emailAddressQuotedString'> <tuv xml:lang="fr"><seg><![CDATA['%localPart%' ne respecte pas le format quoted-string.]]></seg></tuv> </tu> <tu tuid='emailAddressInvalidLocalPart'> <tuv xml:lang="fr"><seg><![CDATA['%localPart%' n'est pas une adresse individuelle valide.]]></seg></tuv> </tu> <tu tuid='fileCountTooLess'> <tuv xml:lang="fr"><seg><![CDATA[Pas assez de fichiers ont été transmis ('%count%'). Minimun : '%min%'.]]></seg></tuv> </tu> <tu tuid='fileCountTooMuch'> <tuv xml:lang="fr"><seg><![CDATA[Trop de fichiers ont été transmis ('%count%'). Maximum : '%max%'.]]></seg></tuv> </tu> <tu tuid='fileExtensionFalse'> <tuv xml:lang="fr"><seg><![CDATA[L'extension du fichier '%value%' n'est pas valide.]]></seg></tuv> </tu> <tu tuid='fileExtensionNotFound'> <tuv xml:lang="fr"><seg><![CDATA[Le fichier '%value%' n'a pas été trouvé.]]></seg></tuv> </tu> <tu tuid='fileFilesSizeNotReadable'> <tuv xml:lang="fr"><seg><![CDATA[Un ou plusieurs fichiers ne peuvent pas être lu.]]></seg></tuv> </tu> <tu tuid='fileFilesSizeTooBig'> <tuv xml:lang="fr"><seg><![CDATA[Fichier trop gros. Maximum : '%max%'.]]></seg></tuv> </tu> <tu tuid='fileFilesSizeTooSmall'> <tuv xml:lang="fr"><seg><![CDATA[Fichier trop petit. Minimun : '%min%'.]]></seg></tuv> </tu> <tu tuid='fileUploadErrorAttack'> <tuv xml:lang="fr"><seg><![CDATA[L'upload du fichier '%value%' n'est pas autorisé.]]></seg></tuv> </tu> <tu tuid='fileUploadErrorCantWrite'> <tuv xml:lang="fr"><seg><![CDATA[Le fichier '%value%' ne peut pas être enregistré.]]></seg></tuv> </tu> <tu tuid='fileUploadErrorFileNotFound'> <tuv xml:lang="fr"><seg><![CDATA[Le fichier '%value%' n'a pas été trouvé.]]></seg></tuv> </tu> <tu tuid='fileUploadErrorFormSize'> <tuv xml:lang="fr"><seg><![CDATA[Le fichier '%value%' dépasse la taille définie dans le formulaire.]]></seg></tuv> </tu> <tu tuid='fileUploadErrorIniSize'> <tuv xml:lang="fr"><seg><![CDATA[Le fichier '%value%' dépasse la taille maximale défini dans ini.]]></seg></tuv> </tu> <tu tuid='fileUploadErrorNoFile'> <tuv xml:lang="fr"><seg><![CDATA[Le fichier '%value%' n'a pas été chargé.]]></seg></tuv> </tu> <tu tuid='fileUploadErrorNoTmpDir'> <tuv xml:lang="fr"><seg><![CDATA[Aucun répertoire temporaire n'a été trouvé pour le fichier '%value%'.]]></seg></tuv> </tu> <tu tuid='fileUploadErrorPartial'> <tuv xml:lang="fr"><seg><![CDATA[Le fichier '%value%' n'a été que partiellement chargé.]]></seg></tuv> </tu> <tu tuid='fileUploadErrorUnknown'> <tuv xml:lang="fr"><seg><![CDATA[Erreur inconnue lors du chargement du fichier '%value%'.]]></seg></tuv> </tu> <tu tuid='notFloat'> <tuv xml:lang="fr"><seg><![CDATA['%value%' n'est pas un nombre décimal.]]></seg></tuv> </tu> <tu tuid='notGreaterThan'> <tuv xml:lang="fr"><seg><![CDATA['%value%' n'est pas strictement supérieur à '%min%'.]]></seg></tuv> </tu> <tu tuid='notInt'> <tuv xml:lang="fr"><seg><![CDATA['%value%' n'est pas un nombre entier.]]></seg></tuv> </tu> <tu tuid='notLessThan'> <tuv xml:lang="fr"><seg><![CDATA['%value%' n'est pas strictement inférieur à '%max%'.]]></seg></tuv> </tu> <tu tuid='isEmpty'> <tuv xml:lang="fr"><seg><![CDATA[Ce champ est vide : vous devez le compléter.]]></seg></tuv> </tu> <tu tuid='stringEmpty'> <tuv xml:lang="fr"><seg><![CDATA[Ce champ est vide : vous devez le compléter.]]></seg></tuv> </tu> <tu tuid='regexNotMatch'> <tuv xml:lang="fr"><seg><![CDATA['%value%' ne respecte pas le format '%pattern%'.]]></seg></tuv> </tu> <tu tuid='stringLengthTooShort'> <tuv xml:lang="fr"><seg><![CDATA['%value%' fait moins de %min% caractères.]]></seg></tuv> </tu> <tu tuid='stringLengthTooLong'> <tuv xml:lang="fr"><seg><![CDATA['%value%' fait plus de %max% caractères.]]></seg></tuv> </tu> <tu tuid='notSame'> <tuv xml:lang="fr"><seg><![CDATA[Les informations ne concordent pas]]></seg></tuv> </tu> <tu tuid='missingToken'> <tuv xml:lang="fr"><seg><![CDATA[Impossible de vérifier la concordance, valeur manquante.]]></seg></tuv> </tu> <tu tuid='hostnameIpAddressNotAllowed'> <tuv xml:lang="fr"><seg><![CDATA['%value%' semble être une adresse IP, ceci n'est pas autorisée]]></seg></tuv> </tu> <tu tuid='hostnameUnknownTld'> <tuv xml:lang="fr"><seg><![CDATA['%value%' semble être un DNS cependant le TLD est inconnu]]></seg></tuv> </tu> <tu tuid='hostnameDashCharacter'> <tuv xml:lang="fr"><seg><![CDATA['%value%' semble être un DNS mais il contient un tiret (-) à une position invalide]]></seg></tuv> </tu> <tu tuid='hostnameInvalidHostnameSchema'> <tuv xml:lang="fr"><seg><![CDATA['%value%' appears to be a DNS hostname but cannot match against hostname schema for TLD '%tld%']]></seg></tuv> </tu> <tu tuid='hostnameUndecipherableTld'> <tuv xml:lang="fr"><seg><![CDATA['%value%' appears to be a DNS hostname but cannot extract TLD part]]></seg></tuv> </tu> <tu tuid='hostnameInvalidHostname'> <tuv xml:lang="fr"><seg><![CDATA['%value%' does not match the expected structure for a DNS hostname]]></seg></tuv> </tu> <tu tuid='hostnameInvalidLocalName'> <tuv xml:lang="fr"><seg><![CDATA['%value%' does not appear to be a valid local network name]]></seg></tuv> </tu> <tu tuid='hostnameLocalNameNotAllowed'> <tuv xml:lang="fr"><seg><![CDATA['%value%' appears to be a local network name but local network names are not allowed]]></seg></tuv> </tu> </body> </tmx>
Dernière modification par peyot (19-06-2009 16:00:50)
Hors ligne
Tu n'as meme pas besoin de faire ca :
$translate = new Zend_Translate('tmx',APPLICATION_PATH .'/languages/messagesfr.tmx','fr'); Zend_Validate_Abstract::setDefaultTranslator($translate);
Il suffit d'avoir Zend_Registry::set('Zend_Translate') de telle manière a ce que cela te retourne une instance de Zend_Translate et que celle ci contienne tes traductions des validateurs et là, plus besoin de passer s'en occuper ^^
Personnellement, j'ai etendu Zend_Application_Resource_Translate pour me charger les différentes fichiers de traduction, i.e. propres à l'application, et ceux qui sont aux bibliothèques.
J'ai plus qu'a faire un plugin qui gère cela pour les modules
Hors ligne
Salut,
Personnellement j'utilise les array pour ce type de traductions. Voici le contenu du tmx ci-dessus après le passage de quelques regex :
<?php return array( 'notAlnum' => "'%value%' ne contient pas que des lettres et/ou des chiffres.", 'notAlpha' => "'%value%' ne contient pas que des lettres.", 'notBetween' => "'%value%' n'est pas compris entre %min% et %max% inclus.", 'notBetweenStrict' => "'%value%' n'est pas compris entre %min% et %max% exclus.", 'dateNotYYYY-MM-DD' => "'%value%' n'est pas une date au format AAAA-MM-JJ (exemple : 2000-12-31).", 'dateInvalid' => "'%value%' n'est pas une date valide.", 'dateFalseFormat' => "'%value%' n'est pas une date valide au format JJ/MM/AAAA (exemple : 31/12/2000).", 'notDigits' => "'%value%' ne contient pas que des chiffres.", 'emailAddressInvalid' => "'%value%' n'est pas une adresse mail valide selon le format adresse@domaine.", 'emailAddressInvalidHostname' => "'%hostname%' n'est pas un domaine valide pour l'adresse mail '%value%'.", 'emailAddressInvalidMxRecord' => "'%hostname%' n'accepte pas l'adresse mail '%value%'.", 'emailAddressDotAtom' => "'%localPart%' ne respecte pas le format dot-atom.", 'emailAddressQuotedString' => "'%localPart%' ne respecte pas le format quoted-string.", 'emailAddressInvalidLocalPart' => "'%localPart%' n'est pas une adresse individuelle valide.", 'fileCountTooLess' => "Pas assez de fichiers ont été transmis ('%count%'). Minimun : '%min%'.", 'fileCountTooMuch' => "Trop de fichiers ont été transmis ('%count%'). Maximum : '%max%'.", 'fileExtensionFalse' => "L'extension du fichier '%value%' n'est pas valide.", 'fileExtensionNotFound' => "Le fichier '%value%' n'a pas été trouvé.", 'fileFilesSizeNotReadable' => "Un ou plusieurs fichiers ne peuvent pas être lu.", 'fileFilesSizeTooBig' => "Fichier trop gros. Maximum : '%max%'.", 'fileFilesSizeTooSmall' => "Fichier trop petit. Minimun : '%min%'.", 'fileUploadErrorAttack' => "L'upload du fichier '%value%' n'est pas autorisé.", 'fileUploadErrorCantWrite' => "Le fichier '%value%' ne peut pas être enregistré.", 'fileUploadErrorFileNotFound' => "Le fichier '%value%' n'a pas été trouvé.", 'fileUploadErrorFormSize' => "Le fichier '%value%' dépasse la taille définie dans le formulaire.", 'fileUploadErrorIniSize' => "Le fichier '%value%' dépasse la taille maximale défini dans ini.", 'fileUploadErrorNoFile' => "Le fichier '%value%' n'a pas été chargé.", 'fileUploadErrorNoTmpDir' => "Aucun répertoire temporaire n'a été trouvé pour le fichier '%value%'.", 'fileUploadErrorPartial' => "Le fichier '%value%' n'a été que partiellement chargé.", 'fileUploadErrorUnknown' => "Erreur inconnue lors du chargement du fichier '%value%'.", 'notFloat' => "'%value%' n'est pas un nombre décimal.", 'notGreaterThan' => "'%value%' n'est pas strictement supérieur à '%min%'.", 'notInt' => "'%value%' n'est pas un nombre entier.", 'notLessThan' => "'%value%' n'est pas strictement inférieur à '%max%'.", 'isEmpty' => "Ce champ est vide : vous devez le compléter.", 'stringEmpty' => "Ce champ est vide : vous devez le compléter.", 'regexNotMatch' => "'%value%' ne respecte pas le format '%pattern%'.", 'stringLengthTooShort' => "'%value%' fait moins de %min% caractères.", 'stringLengthTooLong' => "'%value%' fait plus de %max% caractères.", 'notSame' => "Les informations ne concordent pas", 'missingToken' => "Impossible de vérifier la concordance, valeur manquante.", 'hostnameIpAddressNotAllowed' => "'%value%' semble être une adresse IP, ceci n'est pas autorisée", 'hostnameUnknownTld' => "'%value%' semble être un DNS cependant le TLD est inconnu", 'hostnameDashCharacter' => "'%value%' semble être un DNSmais il contient un tiret (-) à une position invalide", 'hostnameInvalidHostnameSchema' => "'%value%' appears to be a DNS hostname but cannot match against hostname schema for TLD '%tld%'", 'hostnameUndecipherableTld' => "'%value%' appears to be a DNS hostname but cannot extract TLD part", 'hostnameInvalidHostname' => "'%value%' does not match the expected structure for a DNS hostname", 'hostnameInvalidLocalName' => "'%value%' does not appear to be a valid local network name", 'hostnameLocalNameNotAllowed' => "'%value%' appears to be a local network name but local network names are not allowed" ); ?>
Ciao
Hors ligne
Pages: 1