Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Quelques petites questions à propos de la validation des form.
1° Malgré la lecture de la doc de ZF2 il n'y a pas grand chose sur Translator. Et impossible de le mettre en oeuvre.
http://zf2.readthedocs.org/en/latest/us … tions.html ????
http://zf2.readthedocs.org/en/latest/mo … ating.html (On ne sait ps trop ou mettre le code, et il n'y a pas d'exemple.)
http://zf2.readthedocs.org/en/latest/mo … menterrors (Pas un mot)
2° en testant le Skeleton, je suis obligé de passer local à fr_FR pour obtenir la traduction. Je pensais que cela dépendait du navigateur?
'service_manager' => array( 'factories' => array( 'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory', ), ), 'translator' => array( 'locale' => 'fr_FR', 'translation_patterns' => array( array( 'type' => 'gettext', 'base_dir' => __DIR__ . '/../language', 'pattern' => '%s.mo', ), ), ),
Hors ligne
Bonjour,
Je suis entièrement d accord avec jfvole.
je viens de suivre le quickstart de rob allen qui explique la traduction via les vues mais dés que les forms sont abordé il n'y a aucune information sur la traduction des labels de formulaires.
Naivement j'ai tenté : 'label' => $this->translate('Title'),
OU
'label' => $this->getView()->translate('Title'),
dans les deux cas une exception est levé.
C'est très étrange car la traduction des vues fonctionne parfaitement, ont se retrouve donc avec une application à moitié traduite ce qui est gênant si l'ont propose une application bilingue !!!!
Aucune infos sur google sur la traduction de formulaire ZF2 et dans la Doc ZF2 !!!
cordialement
Dernière modification par macgile (16-09-2012 12:18:06)
Hors ligne
Salut à vous.
Effectivement je n'ai pas trouvé de solution pour traduire directement dans la class du formulaire.
Une méthode consiste dans le Controller appeler la méthode setLabel et de définir le text ici, exemple :
$form = new AlphaForm(); $form->get('Alpha')->setLabel('Un label'); $form->get('Beta')->setLabel('Un autre label'); [...] $form->get('submit')->setValue('Submit');
Si tu utilise gettext pour la traduction tu a juste à définir dans les mots clef source, en plus de translate, setLabel et setValue.
Hors ligne
Effectivement la doc n'est pas très claire, j'essayerai de modifier la doc' sur ce point.
Alors, pour les traductions des messages d'erreur :
// Module.php :
public function onBootstrap(EventInterface $e) { $serviceManager = $e->getApplication()->getServiceManager(); // Set the translator for default validation messages $translator = $serviceManager->get('translator'); AbstractValidator::setDefaultTranslator($translator); }
Dans module.config.php, ajoutez :
'translator' => array( 'locale' => 'fr_FR', 'translation_files' => array( array( 'type' => 'phpArray', 'filename' => 'resources/languages/fr.php' ), ), ),
Ne reste plus qu'à créer un dossier "resources/languages/" (au même niveau que "module", "vendor" et compagnie...) et à y copier le fichier fr.php de traduction. Perso je préfère garder ma propre copie des traducitons, comme ça je peux changer certains messages.
Hors ligne
Mais ceci ne concerne que la traduction des messages d'erreur. Pour la traduction du reste (label...) c'est un autre mécanisme. Mais j'ai jamais utilisé.
Hors ligne
Bonjour, et merci de vous pencher sur ce problème...
1° ca ne fonctionne toujours pas chez moi dans cette configuration avec une erreur au niveau du get('translator')
2° J'ai rajouté du code dans module.config.php
'service_manager' => array( 'factories' => array( 'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory', ), ),
3° une fois l'erreur corrigé la traduction ne se fait pas....
Hors ligne
Bizarre, ça marche bien chez moi... on est d'accord que l'on ne parle QUE de la traduction des messages d'erreur générés par les validateurs, et non des autres traductions ?
Hors ligne
Tout a fait on ne parle que des erreurs de validation d'un Form.
Hors ligne
Je viens de retester en mettant à jour le framework, ça marche bien ici. Tu as bien la dernière version en date de ZF 2 ?
Tu as bien mis ton fichier de traduction au bon endroit ?
Hors ligne
Tout est de la dernière version...
Tout est conforme a ton explication...
Hors ligne
Même si c'est un vieux sujet je mets ce que j'ai fais et ce qui fonctionne.
J'ai mis ça dans le dossier config/autoload (niveau au dessus du module) :
[lang=php] 'translator' => array( 'locale' => 'fr_FR', 'translation_files' => array( array( 'type' => 'phpArray', 'filename' => 'resources/languages/fr.php' ), ), ),
le fichier :
Ne reste plus qu'à créer un dossier "resources/languages/" (au même niveau que "module", "vendor" et compagnie...) et à y copier le fichier fr.php de traduction. Perso je préfère garder ma propre copie des traducitons, comme ça je peux changer certains messages.
et dans mon module.php
[lang=php] public function onBootstrap(\Zend\EventManager\Event $e) { //Récupération de l'application $app = $e->getParam('application'); //Récupération de la configuration $config = $app->getConfig(); //Définit les paramètres de traduction $this->setTranslate($config['translator']); } public function setTranslate($options) { $translator = new \Zend\I18n\Translator\Translator(); $translator = $translator->factory($options); \Zend\Validator\AbstractValidator::setDefaultTranslator($translator); }
Hors ligne