Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Salut,
Pour mon premier message sur ce forum qui m'a déjà pas mal servi (je vous remercie), j'ai un problème et une solution pas très propre mais je pense que ça pourrait intéresser du monde.
J'ai découvert un peu par hasard qu'on pouvait, depuis la version 1.9, du zf gérer les pluriels dans les chaînes de traduction.
deux liens qui en parlent : http://www.thomasweidner.com/flatpress/ … alization/ et bien sûr la doc officielle http://framework.zend.com/manual/fr/zen … urals.html
Ca a l'air pas mal du tout puisqu'il suffit de faire
$translate->plural('Car', 'Cars', $number);
ou bien
$translate->translate(array('Car', 'Cars', $number));
Et les chaînes sont traduites. Formidable oui mais ... j'utilise poedit pour traduire mes chaînes et je ne suis pas arrivé à lui faire digérer le tableau ou la deuxième chaine. Donc la solution que j'ai trouvé - sale il faut bien le reconnaître - c'est de faire quelque chose comme ça
$translate->translate('Car') ; $translate->translate('Cars') ; $translate->translate('Car', 'Cars', $number);
Comme ça poedit reconnait mes deux chaines et me permet de les traduire et ensuite j'ai bien mon pluriel. Je n'ai malheureusement pas trouvé mieux...
Dernière modification par webmastard (15-12-2009 22:31:48)
Hors ligne
Je sais pas si tu as fait comme ça, mais moi j'utilise un fichier séparé pour rajouter les traductions qui ne passe pas avec poedit.
Hors ligne
Effectivement ça serait une solution un peu plus propre que la mienne mais qui y ressemble pas mal
J'aurais aimé pouvoir mettre dans poedit un mot clé du style translate(array()) mais je n'ai rien trouvé qui s'en approchait.
Hors ligne
Bonjour,
Tu peux utiliser directement un fichier de traduction TMX ou CVS avec un plugin,voilà un tuto utile pour toi :
http://www.zendcasts.com/introducing-ze … e/2009/11/
A+.Nll
Hors ligne
Merci mais d'après la doc les pluriels ne fonctionnent pas avec les fichiers tmx, seulement gettext, array et csv.
Le csv et les tableaux ne me paraissent pas terribles pour la maintenance - mais je ne pas utilisé ces systèmes.
Hors ligne
Il me semble que Poedit ignore les commentaires en analysant les sources, mais comme je n'en suis plus sur, ou si quelque peut dire comment indiquer à Poedit de ne pas ignorer les commentaires, il serait alors intéressant de pouvoir faire :
/** * translate('Car') * translate('Cars') */ $translate->translate('Car', 'Cars', $number);
Ou encore :
/** * @translate Car * @translate Cars */ $translate->translate('Car', 'Cars', $number);
Ceci ajoute un peu de chose à taper au clavier, mais ça à le mérite d'être clair, et je pense assez propre.
Dernière modification par Blount (16-12-2009 22:22:06)
Hors ligne
Bon c'est pas faute d'avoir chercher mais je ne suis pas arrivé à faire analyser les commentaires par poedit. Dommage c'était une méthode élégante - à défaut de lui faire analyser directement le tableau des pluriels.
Hors ligne
En fait je me suis aperçu que les pluriels ne fonctionnaient à partir du moment où la chaine était traduite dans poedit.... Ou bien j'ai raté mon coup quelque part
donc pour faire simple
ce code fonctionne sans traduction
// je charge un tableau vide $translate=new Zend_Translate('array', array(''), 'fr') ; $translate->translate(array('car', 'cars', 2)) ;
Mais ne marche plus si on charge la traduction
$translate = new Zend_Translate ($adaptateur, APPLICATION_PATH.'/configs/translate/fr.mo', 'fr'); $translate->translate(array('car', 'cars', 2)) ;
Dans le deuxième cas il écrit "a" - cad la deuxième lettre de mon car singulier - en cherchant je suis arrivé à corriger le problème en modifiant le code à la ligne 566 de Zend/Translate/Adapter.php (je pense qu'il faut faire la même modif à la ligne 579 pour les locales à plus de trois lettres)
J'ai changé
if (isset($this->_translate[$locale][$plural[0]][$rule])) { return $this->_translate[$locale][$plural[0]][$rule]; }
par
if (isset($this->_translate[$locale][$plural[$rule]])) { return $this->_translate[$locale][$plural[$rule]]; }
Est ce que quelqu'un pourrait me dire si j'ai foiré quelque part ou bien il y a un bug mais il me parait gros pour qu'il n'ait pas été corrigé...
Dernière modification par webmastard (17-12-2009 00:15:37)
Hors ligne
I read this thread in english: http://tiny.cc/jhFZv
It seems to me that this is a bug. I can't find any bug reports on it. Maybe we should report it to the ZF issue tracker.
library/Zend/Translate/Adapter.php (Line 558-584)
$locale = (string) $locale; if (isset($this->_translate[$locale][$messageId])) { // return original translation if ($plural === null) { return $this->_translate[$locale][$messageId]; } $rule = Zend_Translate_Plural::getPlural($number, $locale); if (isset($this->_translate[$locale][$plural[$rule]])) { // was [$plural[0]][$rule] return $this->_translate[$locale][$plural[$rule]]; // was [$plural[0]][$rule] } } else if (strlen($locale) != 2) { // faster than creating a new locale and separate the leading part $locale = substr($locale, 0, -strlen(strrchr($locale, '_'))); if (isset($this->_translate[$locale][$messageId])) { // return regionless translation (en_US -> en) if ($plural === null) { return $this->_translate[$locale][$messageId]; } $rule = Zend_Translate_Plural::getPlural($number, $locale); if (isset($this->_translate[$locale][$plural[$rule]])) { // was [$plural[0]][$rule] return $this->_translate[$locale][$plural[$rule]]; // was [$plural[0]][$rule] } } }
Hors ligne
I made a bug report on it: http://framework.zend.com/issues/browse/ZF-8816
Hors ligne
Je suis confronté au même problème.
Est ce que, depuis l'ouverture de ce topic, quelqu'un a réussi à faire quelque chose de correct pour gérer ses pluriels via PoEdit ?
Merci par avance.
Hors ligne
Bonjour,
Est ce que quelqu'un à trouvé la solution ?
Merci par avance
Hors ligne