Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour a tous,
Me lançant dans l'apprentissage du ZF, je suis devant un probleme avec le Zend_translate, ou plutot devant une interrogation.
Imaginons une application basique, avec juste une traduction.
Imaginons maintenant que je veuille faire du Francais/anglais sur mon application via gettext
Je charge le fichier .mo pour l'anglais :
$translate = new Zend_Translate('gettext', 'lang/en.mo', 'en'); $translate->setLocale('en');
Ici, la langue serait donc l'anglais.
J'affiche un texte :
$translate->_("Mon texte a traduire.");
Il n'y a aucun probleme pour l'afficher en anglais.
Cependant, pour l'afficher en francais, est on obligé d'avoir un .mo par défaut, traduisant le texte fourni, par le meme texte?, plus un autre pour les autres langages?
par exemple :
$translate = new Zend_Translate('gettext', 'lang/fr.mo', 'fr'); //par défaut la traduction francais/francais $translate->setLocale($lang); $translate->addTranslation('lang/en.mo', 'en'); // traduction francais/anglais
Ne peut t'on pas définir au ZF que si l'on donne une autre langue via setLocale(non définie via addTranslation), il affiche le texte que l'on a fourni via $translate->_() ?
J'espere avoir été clair ^^
En gros : Est on obligé de spécifier un fichier de traduction pour le francais, meme si le texte fourni a $translate->_() est en francais, ou alors on peut direct afficher le texte envoyé a $translate->_() par défaut ?
Merci pour vos réponses
Hors ligne
pour moi, j'utilise les fichiers CSV pour faire le traduction, mais j'imagine qu'il peut marché pour gettext aussi.
alors, la langue par défaut dans notre logiciel est français aussi. j'ai spécifier un fichier de traduction 'translate_fr.csv' mais il est vide. alors:
$translate->_("Mon texte a traduire.");
comme Zend_Translate ne peut pas trouver le traduction dans le fichier(parce que il est vide), il va afficher:
Mon texte a traduire.
Peut-être quelqu'un d'autre a un autre idée...
Hors ligne
Hum......c'est bizarre comme facon de faire de la part du ZF tout de meme ^^
Au passage, vous savez si i lest possible de définir plusieurs fichiers .mo a l'initialisation du Zend_translate ?
Par exemple si je veux que mon $translate soit composé de 2 fichiers mo, par ex core.mo, et plugin.mo
j'ai tenté de fournir un tableau au 2eme parametre lors de l'instanciation du Zend_translate, mais apparement il n'aime pas
Hors ligne
Moi perso je charge qu'un langue, celle que je détermine par la locale automatiquement avec $_SERVER["HTTP_ACCEPT_LANGUAGE"]. Me semble que zend peut déterminé la locale tout seul.
Dans tous les cas, j'utilise des clés pour ma traduction, comme ça dans tous les cas, j'ai tout mon texte dans un seul fichier, plus facile à maintenir.
Hors ligne
Oui, mais le projet sur lequel je travaille est un peu particulier(une application intranet)
Celle ci est divisée en 3 gros modules, qui disposent chacun de plugins, qui peuvent se greffer au module, par un simple dossier.
Donc on ne peut pas tout mettre dans le meme fichier de langue, étant donné qu'on ne sais pas les futurs plugins, etc etc ...
vous allez me dire que je peut faire deux Zend_translate (c'est d'ailleur ce qui arrivera si il n'y a pas d'autre solution), mais c'est quand meme mieux de n'avoir qu'un seul outil de langue ( D'où la question pour savoir si l'on pouvait définir une langue grace à plusieurs fichiers
)
Hors ligne
peut-être il y a quelque chose intéressant ici(c'est en anglais):
http://framework.zend.com/manual/fr/zen … .detection
Hors ligne
Des nouvelles du front
Alors, j'ai lu attentivement le chapitre du zf...
Au début je croyais que le
$translate = new Zend_Translate('gettext', '/language', null, array('scan' => Zend_Translate::LOCALE_DIRECTORY));
allait juste faire l'équivalent d'un Zend_translate + le setLocale() + les différents AddTranslation .
Cependant, apres des tests, j'ai finalement réussi a faire marcher la chose voulue
ZF semble récuperer tout ca en fonction du formatage du nom de fichier lang.
par exemple, voici le code :
//on charge tout les fichiers lang qui sont dans lang/, en scannant ceux qui sont comme langue ente $translate = new Zend_Translate('gettext', 'lang/', null, array('scan' => 'ente')); echo "message1=".$translate->_("Message1"); echo "erreur=".$translate->_("Une erreur est survenue.");
Je disposais de 2 fichiers lang "ente" ( langue spécifique a une entreprise) :
-> en_ente.mo
-> message_ente.mo
Dans en_ente était défini : "Une erreur est survenue." => "An error occured."
et dans message_ente était défini : "Message 1 " => "1st Message"
L'affichage donne bien :
Message 1 = 1st Message
Une erreur est survenue. = An error occured.
Ca marche donc !
Par contre , on ne peut pas charger plusieurs fichiers qui sont dans différents répertoires (j'ai bien essayé de mettre comme répertoire /, mais là faut pas etre pressé pour afficher sa page(long a parcourir tout les fichiers).
Mais bon ! On peut toujours s'arranger pour qu'au final ils soient dans le meme dossier sans y etre à l'original (un lang_tmp/ ou on copierait les fichiers recherchés )
Cependant, est il possible de définir une option concernant les "non-traduction" ?
Je m'explique,
Dans mon cas, message_ente était "chargé" avant en_ente, hors , en_ente possédait bien la chaine "Message 1", mais n'était pas traduite.Au premier essai, j'avais donc "Message 1 = "
Il m'affichait la traduction "vide" de Message1 .
Est il donc possible de définir la non prise en compte de la traduction si cette chaine n'est pas traduite ?
Et pour revenir a ma toute 1ere question, la présence d'un fichier vide de traduction par défault est 'il necessaire ?(je relance au cas ou quelqu'un aurait la solution )
Dernière modification par stf (04-04-2008 16:13:09)
Hors ligne
Pages: 1