Hello,
je rencontre quelques problèmes depuis que j'ai mis en place le cache.

Voilà un exemple d'un de mes fichiers TMX

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>
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
 
 $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);
Quand je veux afficher la liste des languages disponibles :
(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:

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);
J'obtiens:

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


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.
Cette méthode addLanguage() n'exist pas dans l'API !!!


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...

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');
...
Mais de cette manière le fichier est parcouru 4 fois au lieu de 1 seul (sans le cache).

Je ne sais vraiment pas si cette erreur provient du framework ou si je ne rien compris à l'utilisation.

Meilleures salutations,

Nicolas