Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour.
Mon problème est le suivant: je ne parviens pas à changer la langue qui a été définie dans le bootstrap.
Ce que je fais: par défaut j'affiche mes pages en anglais et lors de l'identification d'un membre, je récupère sa langue en base de donnée et je modifie le Zend_Locale avant de le réattribuer à Zend_Translation.
Le code dans mon bootstrap:
$locale = new Zend_Locale("en"); // Chargement du fichier de traduction $translator = new Zend_Translate('tmx', '../application/translation/translations.tmx', $locale); Zend_Registry::set('translator', $translator);
Le code dans mon Helper de vue (pour récupérer mon translator):
// On cherche le translator dans le registre $view->translator = Zend_Registry::get('translator');
Le code dans ma vérification de connexion:
// Authentification réussie ; l'identité est stockée dans la session $userData = $authAdapter->getResultRowObject(null, 'sPassword'); $auth->getStorage()->write($userData); $this->view->title = $auth->getIdentity()->sFirstName; // On charge la langue du membre. $translator = $this->view->translator; //unset($translator); $locale = new Zend_Locale($auth->getIdentity()->userLanguage); $translator = new Zend_Translate('tmx', '../application/translation/translations.tmx', $locale); Zend_Registry::set('translator', $translator); // On redirige vers la page sécurisée. $this->_redirector->gotoUrl('/secure');
Et paf... ça ne change pas la langue et ça fait encore moins des Chocapic... :?
(Bien entendu je suis certain d'avoir mis 'fr' pour le membre qui se connecte ^^)
Merci d'avance pour votre réponse
Hors ligne
Bon bon bon. J'ai pu me débrouiller et je suis enfin arrivé à une solution qui fonctionne... en fait j'en ai même trouvé 2 et j'aimerai savoir laquelle est plus performante que l'autre...
Ce que j'ai fais est très simple, j'ai un Helper pour mes controller dans lequel j'ai défini la méthode preDispatch().
Dans celle-ci j'effectue cela:
$auth = Zend_Auth::getInstance(); if ($auth->hasIdentity()) { $user = $auth->getIdentity(); $locale = new Zend_Locale($user->userLanguage); unset($view->translator); $view->translator = new Zend_Translate('tmx', '../application/translation/translations.tmx', $locale); } else { unset($view->translator); $locale = new Zend_Locale('en'); $view->translator = new Zend_Translate('tmx', '../application/translation/translations.tmx', $locale); }
Avant je plaçais mon translator dans mon registre (Zend_Registry) mais je me suis dis que c'était inutile... Maintenant comme je ne sais pas trop comment fonctionne le système en arrière plan donc j'effectue peut-être une énorme tare... peut être un problème de concurrence (2 utilisateurs connectés avec une langue différente...) je demande donc l'avis des plus expérimentés!
Sinon ce code ne pourrait-il pas se retrouver dans un plugin plutôt?
Merci d'avance
Hors ligne