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 :

Utilisation de Zend-Translate dans une classe autre que le controller


Sujet :

Autres composants PHP

  1. #1
    jux
    jux est déconnecté
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2002
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 36
    Points : 40
    Points
    40
    Par défaut Utilisation de Zend-Translate dans une classe autre que le controller
    Bonjour, j'ai défini mon objet translate dans mon controller de cette manière :
    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
    $translate = new Zend_Translate('gettext',$basePath.'application/languages/',$code_language );
    $translate->setLocale($langLocale);
     
    $frontendOptions = array('lifetime' => 3600, // temps de vie du cache
      								 	'automatic_serialization' => true);
    $backendOptions = array('cache_dir' => '/tmp/');
     
    // créer un objet Zend_Cache_Core
    $cache = Zend_Cache::factory('Core',
                                 'File',
                                 $frontendOptions,
                                 $backendOptions);
     
    $translate->setCache($cache);
    Zend_Registry::set('Zend_Translate', $translate);
    Zend_Validate_Abstract::setDefaultTranslator($translate);
    Zend_Form::setDefaultTranslator($translate);
    Pour l'appeller à partir du controller je fais comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->view->translate('La phrase que je veux traduire');
    à partir d'une vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $this->translate('La phrase que je veux traduire');
    Mais j'ai une classe EMail et je voudrais traduire une phrase qui répéte du genre «*cordialement*» à la fin du mail.,
    J'ai essayé de transmettre l'objet $translate à la classe Email en instanciant dans le controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $e=new Email($translate);
    $e->simple($email_client, $email_client, 'Vos identifiants', $txt);
    j'obtiens le message d'erreur suivant :
    Fatal error: Call to undefined method EMail::translate() in … application/models/EMail.php on line 39


    Ma classe Email :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    class EMail
    {
    	private $config = array(...);
    	private $serveur_envoi = '...';
    	private $noreply = '...';
    	private $translate;
    	private $locale;
     
    	function __construct()
    	{
    	   $num=func_num_args();
     
    	   switch($num)
    	   {
    	      case 0:
    	         $this->translate=new Zend_View_Helper_Translate();
    	         break;
    	      case 1:
    	         $translate=func_get_arg(0);
    		$this->translate=$translate;
     
    	         break;
    	      default:
    	   }
    	}
     
     
    function simple($email_dest,$lib_dest,$sujet,$message )
    {
    $mail = new Zend_Mail();
    $message=$message.'<br><br>'.$this->translate('Cordialement').'.';	//
    $mail->setBodyHtml($message);
    $mail->setFrom($this->noreply, 'noreply');
    $mail->addTo($email_dest, $lib_dest);
    $mail->setSubject($sujet);
    $transport = new Zend_Mail_Transport_Smtp($this->serveur_envoi, $this->config);
    try {		
    	 $mail->send($transport);
    }
    catch (Exception $e) {echo('Pb dans l\'envoi du mail à '.$email_dest);}	
     
    	}
    J'ai créé un constructeur qui prend en compte s'il y a un argument ou pas.
    Peut-être faudrait-il faire ça avec les helpers ?
    Merci pour votre aide.

  2. #2
    jux
    jux est déconnecté
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2002
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 36
    Points : 40
    Points
    40
    Par défaut
    J'ai trouvé mon erreur, il faut remplacer dans la classe EMail
    $this->translate('truc à traduire') par $this->translate->_('truc à traduire').

    Désolé, j'avais vu trop compliqué

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation des objets form dans une classe
    Par quikjean dans le forum Visual Studio
    Réponses: 0
    Dernier message: 27/07/2009, 22h31
  2. [Prototype] Utilisation d'un timer dans une classe
    Par vanitom dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 11/05/2009, 15h17
  3. Prob: Utilisation d'un Movieclip dans une classe, toujours même instanceutilisée
    Par scourchesne dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 08/11/2008, 01h14
  4. Utiliser des variables applications dans une classe
    Par soso78 dans le forum VB.NET
    Réponses: 1
    Dernier message: 13/10/2008, 22h21
  5. [debutant] Utilisation de l'operateur = dans une classe
    Par Battosaiii dans le forum Débuter
    Réponses: 8
    Dernier message: 10/11/2005, 23h01

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