Outils pour utilisateurs

Outils du site


informatique:php:symfony:gestion_de_la_langue_de_l_utilisateur

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
informatique:php:symfony:gestion_de_la_langue_de_l_utilisateur [09/02/2011 18:04] – [Le filtre AutoLanguageFilter] cyrilleinformatique:php:symfony:gestion_de_la_langue_de_l_utilisateur [19/05/2012 00:18] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
 ======  Gestion de la langue de l'utilisateur ====== ======  Gestion de la langue de l'utilisateur ======
    
-Dans cette page nous allons détecter automatique la langue de l'utilisateur puis lui proposer de la changer.+Dans cette page nous allons détecter automatique la langue de l'utilisateur (sfFilter et sfRequest::getPreferredCulture()) puis lui proposer de la changer (sfComponents et sfFormLanguage).
  
 ===== Détection automatique de la langue ===== ===== Détection automatique de la langue =====
Ligne 23: Ligne 23:
 ==== Le filtre AutoLanguageFilter ==== ==== Le filtre AutoLanguageFilter ====
  
 +La classe AutoLanguageFilter qui hérite de sfFilter :
 <code php> <code php>
 # apps/frontend/lib/AutoLanguageFilter.class.php # apps/frontend/lib/AutoLanguageFilter.class.php
Ligne 53: Ligne 54:
 </code> </code>
  
 +et activation du filtre:
 +  # apps/frontend/config/filters.yml
 +  ...
 +  # insert your own filters here
 +  AutoLanguageFilter:
 +    class: AutoLanguageFilter
  
 +===== Sélection de la langue par l'utilisateur =====
 +
 +==== Création IHM de sélection ====
 +
 +On va tout d'abord créer un composant pour gérer l'affichage (IHM) de la sélection de la langue par l'utilisateur. Ce composant hérite de sfComponent et utilise le form sfFormLanguage fourni par le plugin [[http://www.symfony-project.org/plugins/sfFormExtraPlugin|sfFormExtraPlugin]].
 +
 +<code php>
 +# apps/frontend/modules/default/actions/components.class.php
 +class defaultComponents extends sfComponents
 +{
 +  public function executeChangeLanguage(sfWebRequest $request)
 +  {
 +    $available_cultures = sfConfig::get('app_available_cultures');
 +    if( ! is_array($available_cultures) )
 +    {
 +      throw new sfConfigurationException(sprintf('%s requires a "available_cultures" configuration key.', get_class($this)));
 +    }
 +
 +    $this->form = new sfFormLanguage(
 +      $this->getUser(),
 +      array('languages' => $available_cultures )
 +    );
 +  }
 +}
 +</code>
 +
 +Le template associé à ce composant contient le Form nécessaire à sfFormLanguage:
 +<code php>
 +<!-- apps/frontend/modules/default/templates/_changeLanguage.php -->
 +<form action="<?php echo url_for('@change_language') ?>" method="post">
 +  <label for="language">Choose a language:</label>
 +  <?php echo $form['language'] ?>
 +  <?php echo $form->renderHiddenFields() ?>
 +  <input type="submit" value="ok">
 +</form>
 +</code>
 +
 +Ce code (defaultComponents->executeChangeLanguage()) réalise par mal de traitement, via sfFormLanguage qui retrouve toutes les langues dispo dans Symfony pour en extraire celles indiquées dans la configuration du site. On va donc éviter du travail au moteur Php en activant le cache pour ce composant, de cette façon il ne sera exécuté que la 1ère fois.
 +
 +  # apps/frontend/modules/default/config/cache.yml
 +  _changeLanguage:
 +    enabled: true
 +
 +==== Traitement de la sélection ====
 +
 +Création d'une route pour l'action @change_language:
 +
 +  # apps/frontend/config/routing.yml
 +  change_language:
 +    url:   /change_language
 +    param: { module: default, action: changeLanguage }
 +
 +Et le code de l'action:
 +<code php>
 +# apps/frontend/modules/default/actions/actions.class.php
 +class defaultActions extends sfActions
 +{
 +  ...
 +  public function executeChangeLanguage($request)
 +  {
 +    $available_cultures = sfConfig::get('app_available_cultures');
 +    if( ! is_array($available_cultures) )
 +    {
 +      throw new sfConfigurationException(sprintf('%s requires a "available_cultures" configuration key.', get_class($this)));
 +    }
 +
 +    $this->form = new sfFormLanguage(
 +      $this->getUser(),
 +      array('languages' => $available_cultures )
 +    );
 +
 +    if ($this->form->process($request))
 +    {
 +      // culture has been changed
 +    }
 +
 +    return $this->redirect('@homepage');
 +  }
 +}
 +</code>
 +
 +Et voilà, j'espère ne rien avoir oublié...
  
informatique/php/symfony/gestion_de_la_langue_de_l_utilisateur.1297271072.txt.gz · Dernière modification : 19/05/2012 00:15 (modification externe)

Sauf mention contraire, le contenu de ce wiki est placé sous les termes de la licence suivante : CC0 1.0 Universal
CC0 1.0 Universal Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki