Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 12-01-2009 14:01:24

talumn
Nouveau membre
Date d'inscription: 12-01-2009
Messages: 2

[Zend_Translate][1.7.2] Problème avec plusieurs fichiers de traduction

Bonjour,

Je rencontre actuellement un problème avec l'utilisation de Zend_Translate. Ce que je souhaite c'est pouvoir charger plusieurs fichiers de traductions pour une même langue. Concrètement pour chaque langue je souhaite avoir :
- Un fichier de traduction pour tout ce que je considère comme commun (bonjour, formatage date, ...) (variable $translateCommonFile)
- Un fichier de traduction pour toutes les chaines d'erreurs (Standard ZF) remontées lors de l'utilisation de Zend_Form (variable $translateFormFile)
- Un fichier de traduction propre à chaqu'un de mes modules (variable $translateModuleFile)


Voici mon code (sachant que bien avant le cache est activé)

$translate = new Zend_Translate('xliff', $translateCommonFile);
$translate->addTranslation($translateFormFile, $locale, array('clear'=>false));
$translate->addTranslation($translateModuleFile, $locale, array('clear'=>false));


Mon problème est que si je fait un print_r de $translate seules les traduction de $translateModuleFile sont prises en compte alors que je devrais normalement avoir un tableau avec les traduction de mes 3 fichiers.

Si quelqu'un a une idée cela m'intéresse.

Merci

Cédric Déserville

Hors ligne

 

#2 12-01-2009 14:16:54

ndesaleux
Membre
Date d'inscription: 16-04-2007
Messages: 196
Site web

Re: [Zend_Translate][1.7.2] Problème avec plusieurs fichiers de traduction

Pour info, de mon coté avec le cache désactivé :

J'ai dans mon bootstrap

Code:

        Zend_Registry::set('Zend_Translate', 
                           new Zend_Translate('tmx',
                                              COMMON_I18N_DIR,
                                              'fr')
                           );

et dans une classe dérivant de Zend_Controller_Action, que j'utilise partout après, j'ai :

Code:

 public function init(){
        $this->_translate = Zend_Registry::get('Zend_Translate')
                                    ->addTranslation(MODULES_DIR
                                        .$this->_request->getModuleName().'/i18n/');
}

Les informations communes et celles du modules sont correctement chargées.

Désactive le cache pour voir si cela ne vient pas de la

Hors ligne

 

#3 14-01-2009 11:21:32

talumn
Nouveau membre
Date d'inscription: 12-01-2009
Messages: 2

Re: [Zend_Translate][1.7.2] Problème avec plusieurs fichiers de traduction

Bonjour, merci pour la réponse. Après avoir effectué pas mal de recherche / test, j'ai constaté un bug dans la classe Zend_Translate_Adapter_Xliff qui résulte en un reset systèmatique des données de traduction précedemment chargées.

J'ai d'ailleurs ouvert un ticket sur Zend - http://framework.zend.com/issues/browse/ZF-5534

Cordialement.

Hors ligne

 

#4 14-01-2009 11:55:38

ndesaleux
Membre
Date d'inscription: 16-04-2007
Messages: 196
Site web

Re: [Zend_Translate][1.7.2] Problème avec plusieurs fichiers de traduction

Oki, merci pour ton retour

Hors ligne

 

#5 03-03-2009 15:06:38

Nicolas Milesi
Membre
Date d'inscription: 22-08-2008
Messages: 11

Re: [Zend_Translate][1.7.2] Problème avec plusieurs fichiers de traduction

Hello,
je rencontre le même problème depuis que j'ai mis en place le cache, sauf que j'utilise un adaptateur TMX.

Voilà un exemple d'un de mes fichiers TMX

Code:

<?xml version="1.0" encoding="UTF-8"?>
<tmx version="1.4">
    <header creationtoolversion="0.0"
            datatype="plaintext"
            segtype="sentence"
            adminlang="EN"
            srclang="*all*"            [b]aussi testé avec srclang="en_US*" [/b]
            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:

 $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())wink

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:

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

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:

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

Hors ligne

 

#6 03-03-2009 16:14:42

ndesaleux
Membre
Date d'inscription: 16-04-2007
Messages: 196
Site web

Re: [Zend_Translate][1.7.2] Problème avec plusieurs fichiers de traduction

N'associe pas de suite la locale avec Zend_Translate.

Ne fais :

Code:

$oTranslate->setLocale($oLocale);

qu'au tout dernier moment.

Tu devrais ainsi avoir toutes les traductions

Hors ligne

 

#7 03-03-2009 17:11:40

Nicolas Milesi
Membre
Date d'inscription: 22-08-2008
Messages: 11

Re: [Zend_Translate][1.7.2] Problème avec plusieurs fichiers de traduction

Je ne peux pas associer la locale à zend_Translate "plus tard", c'est déjà la dernière ligne avant de le poser en registre.

L'erreur pourrait provenir alors de cette instruction:

Code:

Zend_Registry::set('Zend_Locale', $locale);

Car tous les objets ayant une méthode setLocale() l'utilise implicitement quand l'objet Zend_Locale est défini en registre.

J'ai commenté cette instruction en gardant le même constructeur:

Code:

$translate  = new Zend_Translate('tmx', APP_ROOT . '/locale', $locale);

là ça ne fonctionne tjs pas. Et changeant l'instanciation comme suit:

Code:

$translate  = new Zend_Translate('tmx', APP_ROOT . '/locale');

Les notices suivantes apparaissent:

Notice: No translation for the language 'fr' available. in C:\www\myApp\library\Zend\Translate\Adapter.php on line 317

Notice: The language 'en_US' has to be added before it can be used. in C:\www\myApp\library\Zend\Translate\Adapter.php on line 306

Notice: No translation for the language 'en' available. in C:\www\myApp\library\Zend\Translate\Adapter.php on line 317

Hors ligne

 

#8 04-03-2009 09:36:58

Nicolas Milesi
Membre
Date d'inscription: 22-08-2008
Messages: 11

Re: [Zend_Translate][1.7.2] Problème avec plusieurs fichiers de traduction

Le problème est réglé !!! Merci à ndesaleux, cela tournait effectivement autour de l'affectation des locales.

donc voilà le code modifié:

Code:

... 
Zend_Locale::setCache($cache);
        
$test = new Zend_Session_Namespace('session');
$langLocale = isset($test->lang) ? $test->lang : new Zend_Locale('en_US'); 
        
Zend_Registry::set('Zend_Locale', new Zend_Locale($langLocale));
        
...  
      
Zend_Translate::setCache($cache);
        
$translate  = new Zend_Translate('tmx', APP_ROOT . '/locale'); 
                                                                                     
Zend_Registry::set('Zend_Translate', $translate);

...

Par contre ça règle pas le souci de la fameuse méthode addLanguage() citée dans le manuel et qui n'existe pas dans l'API wink

Dernière modification par Nicolas Milesi (04-03-2009 09:38:41)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages