Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 08-10-2008 14:42:06

koD
Nouveau membre
Date d'inscription: 08-10-2008
Messages: 2

Changer de Zend_Locale?

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:

Code:

$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):

Code:

// On cherche le translator dans le registre
$view->translator = Zend_Registry::get('translator');

Le code dans ma vérification de connexion:

Code:

// 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

 

#2 10-10-2008 10:17:58

koD
Nouveau membre
Date d'inscription: 08-10-2008
Messages: 2

Re: Changer de Zend_Locale?

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:

Code:

        
$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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages