Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'utilise Zend_Translate pour un site multilingue avec l'adaptateur TMX.
J'utilise environ 1 fichiers .tmx par page à traduire et met toutes les langues dans le même fichier. Ca peut paraitre barbare mais c'est finalement assez pratique pour la traduction, pas besoin de jongler entre plusieurs fichiers...
Bref, mon problème est le suivant: j'ai un fichier de ce genre
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE tmx SYSTEM "tmx14.dtd"> <tmx version="1.4"> <header creationtoolversion="1.0.0" datatype="winres" segtype="sentence" o-tmf="abc" ></header> <body> <tu tuid="page.title"> <tuv xml:lang="fr"><seg>Historique de navigation</seg></tuv> <!-- Pas de traduction de ce terme --> </tu> <tu tuid="text.emptyhistory"> <tuv xml:lang="fr"><seg>Vider l'historique</seg></tuv> <tuv xml:lang="en"><seg>Empty history</seg></tuv> </tu> </body> </tmx>
Notez bien le premier terme "Historique de navigation", il n'est pas traduit en anglais.
Pour le chargement de mon traducteur, voilà le code que j'utilise.
$path étant le chemin vers mon fichier tmx détaillé ci-dessus.
Zend_Loader::loadClass('Zend_Translate'); $t = new Zend_Translate('tmx', $path, 'fr'); $t->addTranslation($path, 'en'); $t->setLocale('en'); Zend_Registry::set('translate', $t);
Le problème, c'est que lorsque je fais echo $t->_('page.title'); il ne m'affiche pas "Historique de navigation" en français, comme je le souhaiterais, mais "page.title".
Je pensais qu'en chargeant les 2 traductions, Zend_Translate allait se débrouiller, s'il ne trouvait pas le terme traduit dans la langue demandée (l'anglais), pour récupérer celui de la langue suivante (le français en l'occurence).
Quelqu'un a-t-il une idée ? Ai-je oublié un détail ?
Désolé pour la tartine de texte, mais j'essaie d'être exhaustif
Hors ligne
il faudrait pour cela qu'il y ait une notion de langue par défaut ce qui n'est pas le cas.
donc il te faut tous les messages dans toutes les langues
A+JYT
Hors ligne
Tu peux vérifier avec Zend_Translate la présence ou non d'une traduction via la méthode isTranslated(), cf la doc (http://framework.zend.com/manual/fr/zen … translated)
Tu peux donc checked la présence ou non de la traduction et si absent prendre une autre trad
Hors ligne
un bon moyen est d'utiliser le _SERVER["HTTP_ACCEPT_LANGUAGE"] celuici te donne par ordre de préférence les langage que préfère ton client
tu prends dans l'ordre le language que ton client à sélectionné dans l'application
à défaut le premier de la liste
à défaut le suivant etc.
si aucun langage n'est disponible
il ne te reste qu'à gérer un liste de priorité côté serveur
c'est ce genre de fonctionnement qu'utilise apache dans le mod_negociation LanguagePriority en fr de
A+JYT
Hors ligne
Pages: 1