<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jérôme Tamarelle &#187; generator</title>
	<atom:link href="http://jerome.tamarelle.net/blog/indice/generator/feed/" rel="self" type="application/rss+xml" />
	<link>http://jerome.tamarelle.net/blog</link>
	<description>I share so I am</description>
	<lastBuildDate>Sat, 17 Jul 2010 21:41:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>I18n du routing pour les modules d&#8217;admin Symfony</title>
		<link>http://jerome.tamarelle.net/blog/2010/02/modules-dadmin-multilingues-dans-symfony/</link>
		<comments>http://jerome.tamarelle.net/blog/2010/02/modules-dadmin-multilingues-dans-symfony/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 23:35:12 +0000</pubDate>
		<dc:creator>Jérôme</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[generator]]></category>
		<category><![CDATA[I18n]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[routing]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://jerome.tamarelle.net/blog/?p=112</guid>
		<description><![CDATA[L'internationalisation d'une application (i18n) consiste à servir les pages dans la langue de l'utilisateur. Par défaut, les modules d'admin de Symfony gèrent l'i18n. Ainsi, il est simple de traduire ces modules. Dans cet article je vais vous expliquer : comment gérer plusieurs langues pour l'interface de vos modules d'administration en indiquant la langue dans l'URL [...]]]></description>
			<content:encoded><![CDATA[<p>L'internationalisation d'une application (<strong>i18n</strong>) consiste à servir les pages dans la langue de l'utilisateur. Par défaut, les modules d'admin de Symfony gèrent l'i18n. Ainsi, il est simple de <a title="Traduire l'admin generator de Symfony." href="http://www.amicalement-web.net/traduire-ladmin-generator-symfony/2009/06/09/">traduire ces modules</a>. Dans cet article je vais vous expliquer :</p>
<ul>
<li>comment gérer plusieurs langues pour l'interface de vos modules d'administration en indiquant la langue dans l'URL</li>
<li>et comment basculer en un clic d'une langue à une autre.</li>
</ul>
<div id="attachment_113" class="wp-caption aligncenter" style="width: 510px"><a href="http://jerome.tamarelle.net/blog/wp-content/uploads/2010/02/flags.png"><img class="size-full wp-image-113" title="Flags" src="http://jerome.tamarelle.net/blog/wp-content/uploads/2010/02/flags.png" alt="Drapeaux des langues" width="500" height="15" /></a><p class="wp-caption-text">Basculer rapidement entre les langues.</p></div>
<p>Cet article est écrit pour Symfony 1.4 avec l'admin-generator Doctrine. Nous utiliseront également le plugin <a title="Plugin sfLanguageSwitchPlugin" href="sfLanguageSwitchPlugin">sfLanguageSwitchPlugin</a>.</p>
<span id="Internationaliser_les_modules_dadmin_via_lURL"><h1><span id="more-112"></span>1. Internationaliser les modules d'admin via l'URL</h1></span>
<span id="Les_routes_i18n"><h2>1.1. Les routes i18n</h2></span>
<p>La première étape importante est d'activer i18n dans le fichier settings.yml de l'application :</p>
<pre class="brush: plain;">
all:
  .settings:
    # Enable internationalization
    i18n:            true
    default_culture: fr
</pre>
<p>Le paramètre <code>default_culture</code> ne semble pas avoir d'incidence.</p>
<p>Dans les applications développées sous Symfony, la langue d'une page peut être indiquée dans l’URL via l’attribut <code>:sf_culture</code>. Une route localisée ressemble à cela :</p>
<pre class="brush: plain;">
map:
  url:   /:sf_culture/map/:id
  requirements: { sf_culture: (?:en|es|fr) }
  param: { module: map, action: view }
</pre>
<p>Le paramètre <em>requirements </em>décrit un pattern à respecter pour le champ <code>:sf_culture</code>. Le simple ajout du paramètre <code>:sf_culture</code> dans l'URL modifie automatiquement la langue de l'utilisateur. Il n'y a pas besoin de passer ce paramètre pour générer l'URL avec les <code>url_for(...)</code> et autres <code>link_to(...)</code>.</p>
<span id="Modification_de_sfDoctrineRoute"><h2>1.2. Modification de sfDoctrineRoute</h2></span>
<p>Pour prendre en compte ce paramètre dans les modules d’admin, j'ai créé des classes routing spécifiques. Deux fichiers dans le répertoire lib du projet ou de l'application (au choix) :</p>
<p>La classe sfI18NDoctrineRoute ajoute le paramètre <code>:sf_culture</code> aux routes.</p>
<pre>/lib/routing/sfI18NDoctrineRoute.class.php</pre>
<pre class="brush: php;">
class sfI18NDoctrineRoute extends sfDoctrineRoute
{
  /**
   * @see sfRoute
   */
  public function __construct($pattern, array $defaults = array(), array $requirements = array(), array $options = array())
  {
    // Add the culture prefix to admin routes
    $pattern = '/:sf_culture' . $pattern;
    parent::__construct($pattern, $defaults, $requirements, $options);
  }
}
</pre>
<pre>/lib/routing/sfI18NDoctrineRouteCollection.class.php</pre>
<pre class="brush: php;">
class sfI18NDoctrineRouteCollection extends sfObjectRouteCollection
{
  protected $routeClass = 'sfI18NDoctrineRoute';
}
</pre>
<p>Maintenant que vos classes sont crées, il faut modifier vos routes. Cela donne par exemple :</p>
<pre class="brush: plain;">
my_class:
  class: sfI18NDoctrineRouteCollection
  options:
    model:                MyClass
    module:               my_class
    prefix_path:          /my_class
    column:               id
    with_wildcard_routes: true
</pre>
<p>Essayer maintenant d'afficher votre module en modifiant le paramètre de langue :</p>
<pre>http://localhost/app/<strong>fr</strong>/my_class

http://localhost/app/<strong>hu</strong>/my_class</pre>
<p>Notez bien qu'il n'est ici pas nécessaire d'ajouter les fichiers XLIFF de langue dans le répertoire i18n de l'application. Les fichiers du plugin Doctrine sont directement utilisés.</p>
<span id="Installer_le_plugin_sfLanguageSwitchPlugin"><h1>2. Installer le plugin sfLanguageSwitchPlugin</h1></span>
<p>Si vous souhaitez afficher une barre de choix de la langue, rien de plus simple grâce au plugin sfLanguageSwitchPlugin qui vous fourni un composant dédié.</p>
<p>Téléchargez <a title="Plugin sfLanguageSwitchPlugin" href="http://www.symfony-project.org/plugins/sfLanguageSwitchPlugin">sfLanguageSwitchPlugin</a> et installez-le comme décrit dans la notice.</p>
<pre>/apps/backend/config/settings.yml</pre>
<pre class="brush: plain;">
all:
  .settings:
    enabled_modules:    [sfLanguageSwitch]
    i18n:                     true
</pre>
<pre>/apps/backend/config/app.yml</pre>
<pre class="brush: plain;">
all:
  # sfLanguageSwitchPlugin
  sfLanguageSwitch:
    flagPath: /sfLanguageSwitch/images/flag
    availableLanguages:
      en: { title: English }
      ar: { title: العربية}
      bg: { title: български език }
      ca: { title: Català }
      cs: { title: Česky }
      de: { title: Deutch }
      es: { title: Español }
      fi: { title: Suomen kieli }
      fr: { title: Français }
      hr: { title: Hrvatski }
      hu: { title: Magyar }
      id: { title: Bahasa Indonesia }
      it: { title: Italiano }
      lt: { title: Lietuvių kalba }
      lv: { title: Latviešu valoda }
      nl: { title: Nederlands }
      no: { title: Norsk }
      pl: { title: Polski }
      pt: { title: Português }
      ro: { title: Română }
      ru: { title: русский язык }
      sk: { title: Slovenčina }
      sl: { title: Slovenščina }
      sv: { title: Svenska }
      tr: { title: Türkçe }
</pre>
<p>(Wikipedia : <a title="Liste des codes ISO 639-1" href="http://fr.wikipedia.org/wiki/Liste_des_codes_ISO_639-1">Liste des codes langue</a>)</p>
<p>Ajoutez maintenant le composant à votre layout :</p>
<pre>/apps/backend/templates/layout.php</pre>
<pre class="brush: php;">
  &lt;body&gt;
    &lt;?php include_component('sfLanguageSwitch', 'get'); ?&gt;
    &lt;?php echo $sf_content ?&gt;
  &lt;/body&gt;
</pre>
<p>Pour afficher sous forme de liste, juste un petit bout de code CSS :</p>
<pre>/web/css/main.css</pre>
<pre class="brush: css;">
#lang li { display: inline; }
</pre>
<p><strong>Si vous avez des remarques ou suggestions, n'hésitez pas ! Les commentaires sont là pour ça.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://jerome.tamarelle.net/blog/2010/02/modules-dadmin-multilingues-dans-symfony/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Plugin sfDoctrineAdminGeneratorWithShowPlugin pour Symfony 1.4</title>
		<link>http://jerome.tamarelle.net/blog/2010/01/activer-with_show-du-generator-yml-dans-symfony-1-4/</link>
		<comments>http://jerome.tamarelle.net/blog/2010/01/activer-with_show-du-generator-yml-dans-symfony-1-4/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 16:42:47 +0000</pubDate>
		<dc:creator>Jérôme</dc:creator>
				<category><![CDATA[Applications web]]></category>
		<category><![CDATA[astuces]]></category>
		<category><![CDATA[Doctrine]]></category>
		<category><![CDATA[generator]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://jerome.tamarelle.net/blog/?p=89</guid>
		<description><![CDATA[Une question récurrente sur les forums traitant du framework Symfony : A quoi sert le paramètre with_show dans le fichier generator.yml ? Aussi surprenante soit-elle, la réponse usuelle à cette question est : Par défaut, à rien... Alors comment afficher les détails d'un objet dans une page d'administration sans que celles-ci soient modifiables ? il [...]]]></description>
			<content:encoded><![CDATA[<p>Une question récurrente sur les forums traitant du framework Symfony :</p>
<blockquote><p><strong>A quoi sert le paramètre with_show dans le fichier generator.yml ?</strong></p></blockquote>
<p>Aussi surprenante soit-elle, la réponse usuelle à cette question est :</p>
<blockquote><p><strong>Par défaut, à rien...</strong></p></blockquote>
<p>Alors comment afficher les détails d'un objet dans une page d'administration sans que celles-ci soient modifiables ? il est bien nécessaire d'activer l'action show. Les plugins <a href="http://www.symfony-project.org/plugins/sfDoctrineAdminGeneratorWithShowPlugin">sfDoctrineAdminGeneratorWithShowPlugin</a> et <a href="http://www.symfony-project.org/plugins/sfPropelAdminGeneratorWithShowPlugin">sfPropelAdminGeneratorWithShowPlugin</a> ont été créés pour compenser ce manque. Malheureusement ils ne fonctionnent que pour Symfony 1.2 et 1.3.</p>
<p><span id="more-89"></span></p>
<span id="Plugin_sfDoctrineAdminGeneratorWithShowPlugin_pour_Symfony_1.4"><h2>Plugin sfDoctrineAdminGeneratorWithShowPlugin pour Symfony 1.4</h2></span>
<p>Paralysé par cette absence d'action show sous Symfony 1.4, je me suis lancé dans la correction du plugin <a href="http://www.symfony-project.org/plugins/sfDoctrineAdminGeneratorWithShowPlugin">sfDoctrineAdminGeneratorWithShowPlugin</a> pour le rendre compatible.</p>
<p><img class="alignleft" title="Archive" src="/blog/wp-includes/images/crystal/archive.png" alt="" width="46" height="60" /></p>
<p><a href="http://jerome.tamarelle.net/blog/wp-content/uploads/2010/01/sfDoctrineAdminGeneratorWithShowPlugin-Symfony-1.4.zip">Télécharger sfDoctrineAdminGeneratorWithShowPlugin pour Symfony 1.4</a></p>
<p>Pour installer le plugin, décompressez l'archive dans le répertoire <em>plugin/</em> de votre projet Symfony.</p>
<p>Activez le plugin en modifiant le fichier <em>config/ProjectConfiguration.class.php</em></p>
<pre class="brush: php; first-line: 9; toolbar: false;">$this-&gt;enablePlugins('sfDoctrinePlugin','sfDoctrineAdminGeneratorWithShowPlugin');</pre>
<p>Générez le module d'administration :</p>
<pre class="brush: plain; toolbar: false;">./symfony doctrine:generate-admin --theme=adminWithShow application ClasseExemple</pre>
<p>Activez l'action vue dans le fichier <em>application/modules/classe_exemple/config/generator.yml</em></p>
<pre class="brush: plain; first-line: 7; toolbar: false;">    with_show: true</pre>
<p>Cela donne par exemple :</p>
<pre class="brush: plain; toolbar: false;">
generator:
  class: sfDoctrineGenerator
  param:
    model_class:           ClasseExemple
    theme:                 adminWithShow
    non_verbose_templates: true
    with_show:             true
    singular:              ~
    plural:                ~
    route_prefix:          classe_exemple
    with_doctrine_route:   true

    config:
      actions: ~
      fields:  ~
      list:    ~
      filter:  ~
      form:    ~
      edit:    ~
      new:     ~
      show:    ~
</pre>
<p>Maintenant que l'action show est ajoutée, vous pouvez personnaliser à souhait votre module d'administration en modifiant le fichier generator.yml et/ou les templates. <a title="Documentation Symfony 1.4" href="http://www.symfony-project.org/reference/1_4/fr/06-Admin-Generator" target="_self">Toute la documentation utile est sur le site du framework</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jerome.tamarelle.net/blog/2010/01/activer-with_show-du-generator-yml-dans-symfony-1-4/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
