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