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

Autres composants PHP Discussion :

Où appeler Zend_Translate ?


Sujet :

Autres composants PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Par défaut Où appeler Zend_Translate ?
    Bonjour,

    Je désire utiliser Zend_Translate dans mon appli. J'ai donc déjà fait ceci :

    - dans mon index.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $translate = new Zend_Translate ('csv', APP_PATH . '/lang/french.csv', 'fr');
     
    ...
     
    $registry = Zend_Registry::getInstance();
    $registry->trans = $translate
     
    unset($registry, $translate);
    L'idée est donc de pouvoir faire appel au registre de Zend pour pouvoir utiliser Zend_Translate en faisant quelque chose comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $trans = Zend_Registry::get('trans');
    Cela fonctionne ... Si je vais dans mon fichier controlleur IndexController.php et que je tape cela au début de chaque fonction, je peux utiliser la variable $trans pour utiliser Zend_Translate.

    Ma question est la suivante : comment puis-je faire pour ne pas devoir déclarer cette variable $trans à chaque fonction, dans chaque controlleur ? Ou puis-je placer cet appel pour ne devoir le faire qu'une fois et que cela soit utilisable partout ?

    Merci d'avance,
    Olivier

  2. #2
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Bonjour,

    Si tu veux initialiser des propriétés de contrôleurs pour tous tes contrôleurs, le mieux est probablement de créer une classe abstraite héritant de Zend_Controller_Action, et de laquelle seront dérivés tous tes contrôleurs.

    Pour initialiser tes propriétés, tu as alors deux possibilités : la méthode __construct() ou la méthode init()... Les deux ont des avantages / inconvénients : [MVC] Utilisez-vous la méthode init() des contrôleurs d'action ?

    Si tu utilises la méthode init(), il faudra alors y penser dans les classes dérivées.

    Voilà pour la règle générale. Pour le cas de Zend_Translate, je te conseille de regarder aussi du côté de l'aide de vue Translate qui fonctionne "toute seule" si l'adaptateur est enregistré avec le bon nom dans le registre

  3. #3
    Membre expérimenté Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Par défaut
    Au passage dans ton index fait plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Zend_Registry::set('trans', $translate);
    C'est plus court et plus clair.

    Sinon pour pouvoir l'utiliser dans chaque contrôleur et chaque vue, je te conseille de faire directement un helper de vue.

    Quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Zend_View_Helper_Trans extends Zend_View_Helper_Abstract
    {
        public function Trans($chaine)
        {
        	$trans = Zend_Regsitry::get('trans');
        	return $trans->_($chaine);
        }
    }
    Et après tu devrais pouvoir l'utiliser dans ta vue en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $this->Trans('ce que je veux traduire');
    Et dans ton controleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $var = $this->view->Trans('ce que je veux traduire');
    (Bien sur j'ai écrit ce code sur l'instant, pas sur que tout marche parfaitement surtout que j'ai jamais utilisé Zend Translate)

    EDIT:
    Citation Envoyé par Eusebe Voir le message
    Voilà pour la règle générale. Pour le cas de Zend_Translate, je te conseille de regarder aussi du côté de l'aide de vue Translate qui fonctionne "toute seule" si l'adaptateur est enregistré avec le bon nom dans le registre
    Je connaissais pas, dans ce cas c'est encore plus facile !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Par défaut
    Bonjour,

    Merci de vos réponses ...

    Je viens de mettre en place ce qu'il fallait pour utiliser l'aide de vue Translate et ça marche nickel !!!

    Rien de plus simple.

    Un grand merci ;-)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Par défaut
    J'ai encore une petite question par rapport à cette aide de vue ...

    Comme le nom l'indique, c'est une aide de vue ... Je ne peux donc pas l'utiliser dans un fichier de déclaration de form ...

    Exemple, j'ai un fichier /application/models/Form/CreerProjet.php dans lequelle je souhaite utiliser ce translate (pour les setLabel par exemple).

    Bien entendu, cela ne fonctionne pas ...

    Une idée de ce que je peux faire pour pouvoir utiliser le Zend_Translate ailleurs que dans les vues ? Je dois faire une déclaration propre à cette classe ?

    Merci,
    Olivier

  6. #6
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    En effet, dans ce contexte l'aide de vue ne fonctionne pas. Une solution, c'est faire ce que tu avais commencé dans ton contrôleur : récupérer l'adaptateur dans le registre...

    Tu peux éventuellement pour ça créer une classe abstraite de formulaire, avec un méthode spécifique Translate($data) qui se charge de récupérer l'adaptateur et de traduire ton texte (ce que fait l'aide de vue, quoi)...

Discussions similaires

  1. [VB6] [Langage] VB6 et les appels de dll
    Par Dave63 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 16/01/2003, 18h20
  2. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48
  3. Réponses: 4
    Dernier message: 07/12/2002, 07h34
  4. Appel de procédure...
    Par AmaX dans le forum Langage
    Réponses: 4
    Dernier message: 24/11/2002, 17h48
  5. appel de fichier d'Aide
    Par Atrebate62 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 24/09/2002, 14h13

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