Silex est un micro-framework basé sur les composants de Symfony 2 grâce auquel je suis entrain de développer une sorte de vCard ou page d'accueil (faute de meilleur terme).
Parmis ses nombreuses fonctionnalités: La traduction. Bien qu'elle soit très facile à implémenter, la méthode n'est décrite nulle part sur la doc.
Heureusement, sinon je n'aurais rien à poster sur ce blog.
Trêve de plaisanteries, voici sans attendre comment implémenter la traduction avec Silex.
- Dans un répertoire src/locales/ créez autant de fichiers yml que de langues désirées.
Exemple de fichiers:
en.yml:
hello: Hello about_me: About me contact_me: Contact me
fr.yml:
hello: Bonjour about_me: A propos de moi contact_me: Contactez-moi
- Ensuite, "déclarez" le service TranslationServiceProvider dans votre app.php.
$app->register(new Silex\Provider\TranslationServiceProvider(), array(
'locale' => LiveGeekUtil::getClientLanguage(),
'locale_fallback' => 'en',
'translation.class_path' => __DIR__.'/vendor/Symfony/Component',
));
locale indique la langue utilisée.
locale_fallback indique la langue utilisée si notre application ne supporte pas la langue donnée dans locale.
Notez que j'ai utilisé une méthode statique pour récupérer la langue du navigateur du visiteur. La voici:
public static function getClientLanguage() {
$langs = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
return substr($langs[0], 0, 2);
}
- Indiquez à l'application où se trouvent vos fichiers de langue:
$app['translator.messages'] = array(
'fr' => __DIR__.'/../src/locales/fr.yml',
'en' => __DIR__.'/../src/locales/en.yml'
);
- Maintenant chargez le composant qui lit les fichiers yml (PHP ne le fait pas par défaut):
$app['autoloader']->registerNamespace('Symfony', __DIR__.'/../vendor/Symfony/src');
$app['translator.loader'] = new Symfony\Component\Translation\Loader\YamlFileLoader();
- Et finalement, le service magique, celui qui fait la liaison entre la traduction et les templates Twig, SymfonyBridgesServiceProvider!
$app->register(new Silex\Provider\SymfonyBridgesServiceProvider(), array(
'symfony_bridges.class_path' => __DIR__.'/vendor/Symfony/Component',
));
Et voilà.
A partir de maintenant, affichez le texte dans vos templates grâce aux balises Twig {% trans %}, ceux-ci seront automatiquement traduits dans la langue du navigateur de votre utilisateur, du moment qu'elle soit supportée.
{% trans %}contact_me{% endtrans %}
Liens utiles:
- La documentation de Silex: http://silex.sensiolabs.org/documentation
Bon courage et amusez-vous bien avec Silex! :)
Greg says:
Tu peux regarder ce projet : git@github.com:lyrixx/Silex-Kitchen-Edition.git
Il y a plein d’exemple de code avec silex :)
19 October 2011 at 8:52