Hello,
je rencontre quelques problèmes depuis que j'ai mis en place le cache.
Voilà un exemple d'un de mes fichiers TMX
Ici le code sans cache:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 <?xml version="1.0" encoding="UTF-8"?> <tmx version="1.4"> <header creationtoolversion="0.0" datatype="plaintext" segtype="sentence" adminlang="EN" srclang="*all*" aussi testé avec srclang="en_US*" o-tmf="abc" creationtool="SageTool" /> <body> <tu tuid='new-order'> <tuv xml:lang="en_US"><seg>New Order</seg></tuv> <tuv xml:lang="fr_CH"><seg>Nouvelle Commande</seg></tuv> <tuv xml:lang="it_IT"><seg>Nuova Ordine</seg></tuv> <tuv xml:lang="de_DE"><seg>Neue Bestellung</seg></tuv> </tu> <tu tuid='last-order'> <tuv xml:lang="en_US"><seg>Last Order</seg></tuv> <tuv xml:lang="fr_CH"><seg>Dernière Commande</seg></tuv> <tuv xml:lang="it_IT"><seg>Ultima Ordine</seg></tuv> <tuv xml:lang="de_DE"><seg>Letzte Bestellung</seg></tuv> </tu> .... </body> </tmx>
Quand je veux afficher la liste des languages disponibles :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 $locale = new Zend_Locale('en_US'); Zend_Registry::set('Zend_Locale', $locale); ... $translate = new Zend_Translate('tmx', APP_ROOT . '/locale', $locale); $test = new Zend_Session_Namespace('session'); $langLocale = isset($test->lang) ? $test->lang : $locale; $translate->setLocale($langLocale); Zend_Registry::set('Zend_Translate', $translate);
(Zend_Debug::dump($translate->getAdapter()->getList())
J'ai :
array(4) {
["en_US"] => string(5) "en_US"
["fr_CH"] => string(5) "fr_CH"
["it_IT"] => string(5) "it_IT"
["de_DE"] => string(5) "de_DE"
}
mais avec le cache mis en place:
J'obtiens:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 $frontendOptions = array( 'lifetime' => 3600, 'automatic_serialization' => true ); $cache = Zend_Cache::factory('Core', 'Zend Platform', $frontendOptions); ... $locale = new Zend_Locale('en_US'); Zend_Registry::set('Zend_Locale', $locale); ... Zend_Translate::setCache($cache); $translate = new Zend_Translate('tmx', APP_ROOT . '/locale', $locale); $test = new Zend_Session_Namespace('session'); $langLocale = isset($test->lang) ? $test->lang : $locale; $translate->setLocale($langLocale); Zend_Registry::set('Zend_Translate', $translate);
array(4) {
["en_US"] => string(5) "en_US"
}
Après avoir relu plusieurs fois le manuel, je crois qu'il y a des "erreurs":
ici
Cette méthode addLanguage() n'exist pas dans l'API !!!Les fichiers TMX peuvent avoir plusieurs langues dans le même fichier. Toute autre langue incluse est ajoutée automatiquement, ainsi vous n'avez pas à appeler addLanguage().
Si vous voulez avoir seulement les langues spécifiées de la source traduite, vous pouvez régler l'option defined_language à true. Avec cette option vous pouvez ajouter les langues souhaitées explicitement avec addLanguage(). La valeur par défaut pour cette option est d'ajouter toutes les langues.
Le seul moyen que j'ai trouvé pour avoir toutes mes sources de traduction est d'ajouter les trois autres langues après avoir instancié l'objet Zend_Translate...
Mais de cette manière le fichier est parcouru 4 fois au lieu de 1 seul (sans le cache).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ... $translate->getAdapter()->addTranslation(APP_ROOT . '/locale', 'fr_CH'); $translate->getAdapter()->addTranslation(APP_ROOT . '/locale', 'de_DE'); $translate->getAdapter()->addTranslation(APP_ROOT . '/locale', 'it_IT'); ...
Je ne sais vraiment pas si cette erreur provient du framework ou si je ne rien compris à l'utilisation.
Meilleures salutations,
Nicolas
Partager