Un nom de domaine par langue avec symfony
Classé dans : SymfonyAvec i18n la gestion d’un site multilingue est un vrai plaisir sous Symfony. Mais toutes les explications que l’on peut trouver sur le net pour mettre en place ce type de site utilisent un dossier par langue (monsite.com/es et monsite.com/fr par exemple). Il est pourtant préférable (ne serait-ce que pour le référencement) d’utiliser un nom de domaine par langue (monsite.fr et monsite.es). Voici donc quelques explications pour le faire.
Tout d’abord le mieux est de lire l’excellent tuto sur l’internationalisation de la ferme du web qui vous expliquera comment créer vos templates et vos fichiers de langues.
Ensuite il suffit de créer un filtre:
Allez dans apps/frontend/lib et créez un fichier nommé chooseLanguageFilter.class.php et ajoutez-y le code suivant:
<?php
class chooseLanguageFilter extends sfFilter {
public function execute($filterChain) {
$context = $this->getContext();
$request = $context->getRequest();
$enabled_domain = sfConfig::get('app_domain_enabled', array());
$key=array_search($request->getHost(),$enabled_domain);
if($key!==false) {
sfConfig::set('sf_current_culture', $key);
$context->getResponse()->addMeta('language', $key, true);
$context->getUser()->setCulture($key);
}
$filterChain->execute();
}
}
?>
Pour gérer les noms de domaines qui seront acceptés et les langues qui leur sont associées il faut utiliser le fichier app.yml:
Ouvrez donc le fichier apps/frontend/config/app.yml et ajoutez-y le code suivant:
# default values
all:
domain:
enabled:
fr: www.monsite.fr
es: www.monsite.es
it: www.monsite.it
Il ne reste plus qu’à activer votre filtre:
Ouvrez le fichier apps/frontend/config/filters.yml et ajoutez-y le code suivant:
chooseLanguage: class: chooseLanguageFilter
Et voila, désormais vous avez un site multilingue utilisant un nom de domaine par langue.
Ps: pensez à vider le cache de Symfony (cc).
Tags : multilingue
- Permalien
- maniT4c
- 15 juin 2011 12:10
- Commentaires (0)