2010-09-27 28 views
2

J'écris un site web en utilisant ZendFramework et j'ai décidé d'utiliser le système gettext pour internationaliser son contenu. Dans mes vues, j'écris des chaînes en français et ne fournissons qu'un seul fichier "en.mo" pour traduire les phrases en anglais. Je voudrais éviter de maintenir un fichier "fr.mo" qui traduirait seulement une phrase à la même phrase exacte. Existe-t-il un moyen de dire à Zend ou gettext que lorsque les paramètres régionaux sont "fr" ou "fr_FR" alors il n'y a pas besoin de chercher un fichier de traduction et la chaîne de clé doit être retournée telle quelle? Ou peut-être existe-t-il une raison de créer le fichier "traduction d'identité" fr.mo?Zend framework, gettext, poedit et langage humain dans lequel les chaînes de caractères sont écrites

-clés citations de mon code à ce point:

Extrait de mon bootstrap:

 
protected function _initTranslations() { 
     $config = $this->getApplication()->getOptions(); 

     Zend_Locale::setDefault('en'); // fallback if detection fails completely 

     $locale = new Zend_Locale(); 
     if (!in_array($locale->getLanguage(), explode(',',$config['available_translations']))) { 
      $locale->setLocale('en'); // requested language is not available => use english 
     } 

     $translate = new Zend_Translate(array( 'adapter' => 'gettext', 
               'content' => APPLICATION_PATH.'/../languages/gda-'.$locale->getLanguage().'.mo', 
               'locale' => $locale)); 


     $translate->setLocale($locale); 

     $this->bootstrap('view'); 
     $this->getResource('view')->getHelper('translate')->setTranslator($translate); 
    } 

contenu/langues /:

 
gda-en.mo 
gda-fr.mo <== this one I would like to avoid maintaining 

grâce

Répondre

2

Fluxine,

Lorsque vous utilisez l'adaptateur Gettext de Zend_Translate, vous aurez besoin:

  • le gda.pot contenant tous vos msg-id (en français dans votre cas)
  • la gda-fr.pocontenant au moins une traduction pour pour générer les gda-fr.mo (qui sera presque vide ...)
  • d'autres fichiers de traduction
    • gda-en.po pour générer le gda-en.mo
    • gda-de.po pour générer le gda-de.mo
    • ....
    • gda-XX.po pour générer le gda-XX.mo

Le fait important est ici:

Votre "traduction d'identité", comme vous l'appelez il doit exister, sinon Zend se plaindra du fait que le "fr" (dans votre cas) n'est pas disponible

Dans poEdit, traduisez simplement un petit vers la même chaîne, générez le fichier *.mo correspondant, enregistrez-le et oubliez-le.

Vous n'avez plus besoin de mettre à jour votre fichier gda-fr.po, ni de régénérer un fichier gda-fr.po mis à jour.

L'adaptateur retourne l'original, la chaîne française, parce qu'il n'y a pas de traduction pour elle dans les gda-fr.mo

+0

Merci beaucoup, il fait sens pour faire ce que vous proposez et fonctionne comme prévu.De plus, je consigne les traductions manquantes dans un fichier en utilisant les options Zend_Translate, mais comme presque toutes les traductions sont manquantes pour le français, je vais avoir des milliers de lignes dans mon fichier journal. Existe-t-il un moyen connu de ne pas enregistrer les traductions manquantes pour un environnement particulier? Bien que la journalisation des traductions manquantes ne soit probablement pas la meilleure façon de gérer la situation. – Fluxine

+0

La journalisation de la traduction manquante est en quelque sorte généralisée, car poEdit et le format gettext en général vous aideront à garder votre modèle de traduction * .pot à jour (en utilisant la source du formulaire de mise à jour, vous aurez XXX nouveau, YYY obsolète). Ensuite, ouvrez chaque fichier de langue gda - *. Po, et effectuez une mise à jour à partir du modèle, a.k.a. votre gda.pot. – Julien

+0

Si vous répondez à votre question, cliquez sur la coche verte ;-) – Julien