1

Je suis en train de mettre à jour une application web php qui devient multilingue, basée sur le framework Zend MVC, et j'essaie de trouver la meilleure approche pour passer l'objet de traduction à différentes classes/couches.Design Pattern pour faire passer un objet de traduction? Pour PHP

La plupart de ma traduction est effectuée au niveau de la vue, mais dans certains cas, je dois renvoyer des messages d'état à partir de bibliothèques personnalisées.

Je pourrais simplement créer une propriété pour la bibliothèque et définir le traducteur, mais je me demande s'il y a une meilleure façon d'intégrer un objet traducteur dans une application existante?

Répondre

0

Vous pouvez toujours instancier le traducteur dans le fichier bootstrap.php afin qu'il soit disponible pour toutes les classes en tant que global. C'est comme ça que je le ferais puisque vous avez probablement besoin de l'utiliser partout. Ce n'est pas élégant, mais cela vous évite d'avoir à ajouter du code là où une classe doit lancer une exception ou retourner un message d'erreur.

+0

ouais c'est une option I Je me penche vers, qui, comme vous l'avez dit n'est pas élégant mais le plus pratique. Cependant, je n'ai peut-être pas à faire cela du tout, en essayant de pousser le code spécifique au langage à un niveau tel que la bibliothèque ne fait que renvoyer des codes d'état que le contrôleur devrait connaître. Merci pour la réponse. – AndreLiem

0

Si vous n'avez pas installé autant de contrôleurs, ne pouvez-vous pas étendre le contrôleur de base et instancier le traducteur? Il devrait être disponible pour utilisation dans tout le système.

Quelque chose comme ceci pour prolonger:

<?php 
class BaseController extends Zend_Controller_Action 
{ 
    public function init() 
    { 
    //setup translation object 
    } 
} 
?> 
2

Tenez les utilisateurs lanaguage dans un Memento et passer que par la logique du programme, lorsque vous devez faire utiliser la traduction il identifier la langue.

2

Si vous utilisez Zend_Translate, il est préférable d'utiliser register.

Zend_Registry::set('Zend_Translate', $translate); 

De cette façon, toutes les classes peuvent trouver automatiquement (Zend_Form, Zend_Validate, ...)

+0

Si je me souviens bien, le traducteur est déjà enregistré avec cette clé, afin d'être utilisé à partir des scripts de vue, des validateurs et des formulaires. –

Questions connexes