IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MVC PHP Discussion :

Helper pour Zend_Translate


Sujet :

MVC PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 41
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->view->translate = Zend_Registry::get('translate');
    De ce fait je peux écrire dans mes vues:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?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?

  2. #2
    Membre chevronné
    Homme Profil pro
    Lead Dev Web
    Inscrit en
    Avril 2005
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Lead Dev Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2005
    Messages : 282
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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);
        }
    }
    ?>

  3. #3
    Invité
    Invité(e)
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->view->translate = Zend_Registry::get('translate');
    De ce fait je peux écrire dans mes vues:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?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

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 38
    Par défaut
    Cela dans ton controller devrait fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->view->translate('')

Discussions similaires

  1. Class Helper pour les Array
    Par topolino dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/12/2014, 13h34
  2. [2.x] Comment créer un Helper pour les vues ?
    Par vanitom dans le forum Symfony
    Réponses: 2
    Dernier message: 07/03/2012, 10h06
  3. [1.x] Un helper pour se situer ?
    Par Fused dans le forum Symfony
    Réponses: 5
    Dernier message: 19/05/2011, 14h14
  4. Helper pour simplifier l'envoi de mail
    Par iubito dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 08/03/2011, 19h03
  5. Helper pour les vues ou les controllers
    Par k o D dans le forum MVC
    Réponses: 3
    Dernier message: 25/09/2008, 12h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo