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 :

traduction avec zend_translate


Sujet :

Autres composants PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 75
    Par défaut traduction avec zend_translate
    Bonjour,

    J’utilise dans une application zend_translate avec TMX et tout marche bien mais j'ai problème au niveau du modèle.

    Quand je tape par exemple "xxxxx/fr/default" ou "xxxxx/en/default il m'affiche la page selon la langue choisie mais seulement celui de la vue que j'ai déclaré dans TMX mais la partie dans le modèle ne change pas (par exemple un formulaire créer au niveau modèle).

    L'idée c'est que par "array" il suffit de mettre les mots utilisés dans fr.php ou en.php et lui s'occupe automatiquement de la traduction sans mettre "$this->translate('key_1')" pour le modèle alors dans la vue il faut déclarer quel est le mot à traduire...

    Alors est ce que c'est la même chose pour TMX et comment je dois déclarer mes champs qui sont utilisés dans le modèle.

    Merci.

  2. #2
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 75
    Par défaut
    Bonjour,

    Bon je m'excuse mais tout simplement ce que je cherche c'est ça :

    quand j'écris cela dans ma vue(index.phtml) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $this->translator->_("message1"); ?>
    il m'affiche la traduction correcte du message qui est stocké dans mon fichier TMX,alors pour ma formulaire qui est fait dans le modèle(models/mailform.php) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $form->submit->setLabel('Ajouter');
    le mot "ajouter" s'affiche toujours sans changement alors que je ne peux pas mettre du code php entre deux tiret.

    Ma question est trop simple...mais je ne trouve rien sur le net c'est tout alors je viens sur le forum...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 74
    Par défaut
    Bonjour,

    Et pourquoi pas tout simplement ça ?

    Code code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      $label = $translator->_("Ajouter");
      $form->submit->setLabel($label);

    Ou ça ?

    Code code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      $form->submit->setLabel($translator->_("Ajouter"));

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 178
    Par défaut
    ou bien, quitte à avoir un translator dans le model
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $form->setTranslator($translator)

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 75
    Par défaut
    Bonjour,

    Bon merci pour votre réponse à ma question bête,j'ai trouvé la solution avant votre réponse et comme j'ai dis une bêtise, mais maintenant j'ai un autre problème un peu dur : je dois changer la langue automatiquement selon le profil d'utilisateur,par exemple un utilisateur qui est connu dans la base donnée par "username" ,"password" et "langage".Donc selon la langue de l'utilisateur on affiche la page selon "langage" lors d'une authentification...

    Est ce que quelle qu'un à une idée??

    Merci.

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 75
    Par défaut
    Bonjour,

    D'après mes recherches sur google,je trouve que ce sujet est rarement abordé alors je n'ai pas trouvé ce que je cherche précisément sauf que a part de détecter la langue selon l'utilisateur connecté(la langue dans la base de donnée),j'ai trouvé la détection de la langue selon la préférence du navigateur alors deux méthodes(session ou par cookies) alors :

    - récupération de la langue de l'utilisateur (au moment de l'identification/ a l'utilisation du site / ...)
    - passage de ce paramètre en session/cookie
    - lecture de ce paramètre dans un helper qui mets ta locale à jour

    j'ai essayé avec cookies et voilà le code :

    bootstrap/index.php

    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
     
     
    require_once('./library/plugins/translations.php');
    $frontController->registerPlugin(new Translations());
     
    Zend_Loader::loadClass('Zend_Controller_Router_Rewrite');
     
    // Ajout de la nouvelle route
    $router = new Zend_Controller_Router_Rewrite();
    $router->addRoute(
        "default",
        new Zend_Controller_Router_Route(
            "/:language/:module/:controller/:action/*",
            array(
                "language"      =>  "fr",
                "module"        =>  "default",
                "controller"    =>  "index",
                "action"        =>  "index"
            )
        )
    );
     
    // Attribution de la route au front controller
    $frontController->setRouter($router);
    et plugins/translations.php :

    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
     
    <?php
    class Translations extends Zend_Controller_Plugin_Abstract
    {
        public function routeShutdown(Zend_Controller_Request_Abstract $request)
        {
                   $locale = new Zend_Locale(); 
            $options = array('delimiter' => ';');
            $translator = new Zend_Translate('tmx','./application/default/translations/translations.tmx','fr',$options);
                    //je récupére des paramètres
            $requestParams = $this->getRequest()->getParams();
     
            //je récupére du cookie
            $requestCookie = $this->_request->getCookie('lang');
     
            if( isset($requestParams['language']) && $requestParams['language'] != ""  ) {
                $language = $requestParams['language'] ;
            } elseif ( $requestCookie!= "" ) {
                $language = $requestCookie ;
            } else {
                $language = false;
            }
     
            if ($language == false) {
                $language = ($translator->isAvailable($locale->getLanguage())) ? $locale->getLanguage() : 'en';
            }
     else {
                $locale->setLocale($language);
                $translator->setLocale($locale);
                Zend_Form::setDefaultTranslator($translator);
     
                         setcookie('lang', $locale->getLanguage(), time()+60*60*24*30, '/');
     
                Zend_Registry::set('language', $locale);
                Zend_Registry::set('translator', $translator);
            }    
        }
    }
    le controleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
        function init()
        {
    $this->view->translator = Zend_Registry::get('translator');   
    $this->initView();
    $this->view->baseUrl = $this->_request->getBaseUrl();
    $this->view->user = Zend_Auth::getInstance()->getIdentity();		
        }
     
    et dans l'action:
     
    $translator = Zend_Registry::get('translator');
    Je mis ce code juste pour partager avec vous mais ce n'est pas cela ce que je cherche...


    bon ce que je cherche vraiment c'est d'après créer un compte utilisateur et choisir la langue ou le pays de chaque utilisateur,je dois tirer l'identité de l'utilisateur connecté avec "getIdentity()" et puis utiliser l'ID pour connaitre la langue donc de donner la page avec la langue de chaque utilisateur...c'est la je me trompe car je suis pas arriver à ce niveau de codage...

    Merci d'avance.

Discussions similaires

  1. Traduction avec Gettext
    Par glsn dans le forum Langage
    Réponses: 3
    Dernier message: 25/07/2007, 10h29
  2. [FASM=>NASM] Problème traduction avec MOD et $
    Par SteelBox dans le forum Assembleur
    Réponses: 4
    Dernier message: 30/05/2005, 14h16
  3. Traduction avec gettext
    Par aA189 dans le forum Linux
    Réponses: 7
    Dernier message: 19/10/2004, 14h57
  4. Traduction avec Polyglot
    Par TheViviTouch' dans le forum Outils
    Réponses: 3
    Dernier message: 01/08/2004, 23h32

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