Symfonians en VF
Par NiKo le vendredi 14 mars 2008, 22:47 - Dev
- Lien permanent -
7 commentaires -
Tags :
Je viens de mettre en ligne la version française de Symfonians[1]. J'ai préféré utiliser un sous-domaine pour définir la langue courante plutôt qu'un paramètre supplémentaire dans la requête, car le routing de Symfony implique de le gérer pour chacune des route (ou si y'a une astuce, je suis preneur.)
Ici, je détecte le sous domaine et en fait la langue courante de l'utilisateur au moyen d'un filtre. Pour ceux que ça intéresse, en voici le code :
<?php class i18nSubdomainFilter extends sfFilter { public function execute($filterChain) { if ($this->isFirstCall()) { $context = $this->getContext(); $request = $context->getRequest(); $host_parts = explode('.', $request->getHost()); if (count($host_parts) > 2) // We have at least a subdomain { $subdomain = strtolower($host_parts[0]); $enabled_cultures = sfConfig::get('app_cultures_enabled', array()); if (array_key_exists($subdomain, $enabled_cultures)) { sfConfig::set('sf_current_culture', $subdomain); $context->getResponse()->addMeta('language', $subdomain, true); $context->getUser()->setCulture($subdomain); } } } $filterChain->execute(); } }
Notez que je définis la liste des langues disponibles dans le fichier app.yml, pour éviter les blagues et gérer les domaines pour chacun des environnements que j'ai configuré[2] :
prod:
cultures:
enabled:
en: http://symfonians.net/
fr: http://fr.symfonians.net/
L'activation du filtre se fait dans le fichier filters.yml :
i18nSubdomain: class: i18nSubdomainFilter
Et roule ma poule, mon routing reste strictement intact 

7 commentaires (Ajouter un commentaire)
[MA]Pascal> Merci, corrigé
Bon boulot Niko
Je suis tombé sur une petite erreur ici :
http://fr.symfonians.net/people/cou...
> compétents en %skill%
A+
Ah et précision importante, je suis en 1.0 sur Symfonians...
Fabien> Je connaissais le coup du paramètre
:sf_culture, mais la question que je me posais (et j'ai passé quelques heures à me pencher sur la question) c'est s'il est possible d'éviter de redéfinir toutes les routes du fichierrouting.ymlen y ajoutant ce paramètre pour chaque url (car je tiens absolument à avoir la locale dans l'url, je ne tiens pas à ce que cela ne soit géré que par la session)J'ai essayé de bidouiller les masques de routes par défaut, mais sans succès...
Il y a bien une astuce... c'est d'utiliser :sf_culture dans la règle de routing.
symfony va alors remplacer sf_culture par la langue courante de l'utilisateur de façon transparente sans avoir à passer le paramètre dans chaque appel à url_for() ou link_to().
De plus, en entrée, symfony va automatiquement changer la langue courante de l'utilisateur en fonction du paramètre sf_culture.
Bref, l'utilisation de sf_culture permet de faire tout ce qu'il y a dans le filtre sans rien avoir à écrire.
Tonio> Merci pour l'info ! C'est résolu
Nice !
Par contre y'aurais pas comme un soucis avec les dates lors de l'édition d'un profil ?
Le format indiqué par le calendrier est pas le bon, est quel que soit le format saisi, ca veux pas jouer ...