0

J'ai suivi avec succès les instructions de ce link, maintenant mon site est multilingue sans avoir besoin de mettre "locale" dans les appels "traslate()". Mais je dois mettre le TextDomain chaque fois que je l'appelle.zend framework 2 Définir TextDomain dans onBootstrap

$this->traslate("Hello", __NAMESPACE__) //where __NAMESPACE__ is the text domain. 

Je voudrais mettre textdomain dans la méthode onBootstrap au lieu de le mettre dans chaque appel de l'aide « traslate() ». J'ai essayé avec la méthode setTextDomain, mais elle n'existe pas. Quelqu'un sait comment le faire?

Le code onBootStrap suit:

.....//Code for define $locale. 
    $sm = $e->getApplication()->getServiceManager(); 
    $translator = $sm->get('translator'); 
    $translator->setLocale($locale); 
    $traslator->SetTextDomain($textdomain); //This line not work!!!!! 
+0

Est-ce copier-coller? Parce que dans ce cas, il fait un peu de sens que ça ne marchera pas;) '$ traslator' =>' $ translator' et 'SetTextDomain()' => 'setTextDomain()' – Sam

+0

Ohh Désolé. C'est une erreur d'écriture (ne pas copier et coller). J'ai aussi regardé la documentation de l'API zend et cette méthode n'existe pas. – josepmra

Répondre

0

Okey. Nous avons avancé d'un pas.

La première solution fonctionne bien (la solution de vue), maintenant mes textes de la page Web de calomnier uniquement à l'aide des paramètres d'aide, étant Locale et textdomain défini par la config:

$ this-> translate ('BONJOUR') ;

Mais la deuxième solution ne fonctionne pas. Je ne comprends pas parce que le même plugin est accepté dans la vue et pas dans le onBootstrap quand le nom est le même.

Je réécris mon code onBootstrap ci-dessous:

$translator = $e->getApplication()->getServiceManager()->get('translator'); 
    $pm = $translator->getPluginManager(); //until here works ok. 
    $pm->get('translate'); //this throws an error message how if 'translate' not found. 
1

n'a pas vu ce droit la première fois. Aller par DASPRIDS Presentation about ZF2 I18N la fonction correcte appeler est:

$this->plugin('translate')->setTranslatorTextDomain('module-b'); 

Bien que si je vois correctement, qui est à l'intérieur des scripts de vue. Obtenir le traducteur de ServiceManager cependant - je n'ai pas testé cela - mais essayez ce qui suit:

$translator->getPluginManager()->get('translate')->setTranslatorTextDomain('foo');