Live geek or die tryin'

Posted on by Dinduks


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:

Bon courage et amusez-vous bien avec Silex! :)

Posted on by Dinduks | Posted in Development, Symfony 2, Tutorials | Tagged , ,


3 Responses to Silex: Le service de traduction et les templates Twig

  1. 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 :)


Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>