Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > MVC
MVC Forum de support sur le développement d'applications de type modèle-vue-contrôleur avec Zend Framework ainsi que vos questions sur les plugins, les helpers etc. Avant de poster -> Cours MVC, FAQ ZF Controller
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/01/2008, 11h10   #1
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 41
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : janvier 2007
Messages : 41
Points : 35
Points : 35
Par défaut Helper pour Zend_Translate

Bonjour,

Quelqu'un a déjà fait un petit helper pour les langues?

Personellement, j'instancie la classe Zend_Translate dans le bootstrapper et je le met dans le registry. Ensuite dans la fonction init de chaque contrôleur, je récupère l'objet et je le passe à la vue:
Code :
$this->view->translate = Zend_Registry::get('translate');
De ce fait je peux écrire dans mes vues:
Code :
<?php echo $this->translate->_("Home: Title"); ?>
Mais est-ce la meilleure façon de faire? J'ai vu un peu les "view helpers" qui me semble plus approprié, mais j'ai peur d'instancialiser trop de fois la classe Zend_Translate... Quelqu'un a déjà été confronté au problème?
coolcoco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 11h58   #2
Membre éclairé
 
Homme Yann
Développeur Web
Inscription : avril 2005
Messages : 280
Détails du profil
Informations personnelles :
Nom : Homme Yann
Âge : 27
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2005
Messages : 280
Points : 366
Points : 366
Envoyer un message via MSN à yannux
Perso j'ai juste déplacer la récupération dans un helper comme ça j'ai pas à la faire dans tous les controllers....
Après à voir peut être qu'un plugin peut être bien aussi...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
<?php
 
/**
 * Helper that get Zend_Translate object from Zend_Registry
 *
 */
 
class Zend_View_Helper_Translate{
 
    /**
     * @var Zend_Translate
     */
    protected $_translate = null;
 
    public function translate($message, $param = null)
    {
        $this->_translate = Zend_Registry::get('translate');
 
        echo $this->_translate->_($message);
    }
}
?>
yannux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2008, 11h44   #3
Rédacteur
 
Homme Jean-Pierre
Inscription : août 2005
Messages : 333
Détails du profil
Informations personnelles :
Nom : Homme Jean-Pierre
Âge : 26
Localisation : Suisse

Informations forums :
Inscription : août 2005
Messages : 333
Points : 442
Points : 442
Citation:
Envoyé par coolcoco Voir le message
Bonjour,

Quelqu'un a déjà fait un petit helper pour les langues?

Personellement, j'instancie la classe Zend_Translate dans le bootstrapper et je le met dans le registry. Ensuite dans la fonction init de chaque contrôleur, je récupère l'objet et je le passe à la vue:
Code :
$this->view->translate = Zend_Registry::get('translate');
De ce fait je peux écrire dans mes vues:
Code :
<?php echo $this->translate->_("Home: Title"); ?>
Mais est-ce la meilleure façon de faire? J'ai vu un peu les "view helpers" qui me semble plus approprié, mais j'ai peur d'instancialiser trop de fois la classe Zend_Translate... Quelqu'un a déjà été confronté au problème?
Hello Coolcoco ,

Le Helper simplifie les choses et te permet de réutiliser ton code dans d'autres projets ou de le transmettre à d'autres développeurs de la manière la plus orientée objet qui soit .

En terme de perfomances, le helper sera instancié une seule fois et ton adapteur Zend_Translate avec (une seule et unique fois lui aussi).

Ensuite ce sont simplement des appels succèssifs de méthodes. C'est totalement acceptable point de vue performances. Les machines actuelles font la différence.

Et d'ailleurs il existe bien des moyens d'optimiser l'exécution du code en production...

La solution du bootstrap est rébarbative...Elle implique de ne pas oublier le "$this->view->translate" dans chaque controlleur, alors que tu peux facilement automatiser cette affectation avec View_Helper. Et ça ne fait pas une différence remarquable au niveau du temps d'exécution.

Bye
__________________
Mes articles DVP : http://jp-grossglauser.developpez.com
Guardian_7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2009, 14h46   #4
Invité de passage
 
Inscription : août 2008
Messages : 16
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 16
Points : 2
Points : 2
ok pour les view (via le helper)

mais quid pour l'utiliser dans les controlleurs?

J'ai créé une classe à appeler dans les controlleur, je l'appèle via : UDF_Translate::translate->('NOM_DU_LABEL')

voila ma classe :
Code :
1
2
3
4
5
6
7
class UDF_Translate
{
    public static function translate($message) {
        $translate = Zend_Registry::get('Zend_Translate');
        return $translate->_($message);
    }
}
Je n'ai pas d'erreur mais dans ma page, au lieud'avoir ma traduction affichée, j'ai le contenu de la variable $message qui s'affiche (donc la clé de l'array index que translate doit utiliser).

je ne comprends pas pourquoi il ne me renvoit pas la traduction voulue pour cette clé. le plus étrange, c'est que si je remplace $message par la vraie clé en texte, la ca fonctionne

donc : return $translate->_('NOM_DU_LABEL');

Quelqu'un aurait une idée?

P.S: les autres fonction de la classe translate fonctionnent, la fonction qui renvoit tous les labels fonctionne bien quand je l'utilise, ca me renvoit bien un array avec toutes les traductions.

Pour quoi donc avec une variable qui contient la clé ca ne fonctionne pas?

Merci d'avance, et dites moi si je ne suis pas assez clair ou si vous avez besoin de plus d'infos pour me répondre
Lopimp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2009, 14h45   #5
Membre du Club
 
Sébastien GUARY
Inscription : avril 2007
Messages : 38
Détails du profil
Informations personnelles :
Nom : Sébastien GUARY
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : avril 2007
Messages : 38
Points : 54
Points : 54
Cela dans ton controller devrait fonctionner

Code :
1
2
 
$this->view->translate('')
syber est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h21.


 
 
 
 
Partenaires

Hébergement Web