Skip to main content

Silex, Twig and Translation support

This blog post might be outdated!
This blog post was published more than one year ago and might be outdated!
· 2 min read
Stephan Hochdörfer
Head of IT Business Operations

As I have written a couple of days ago, we are using Silex and Twig to build a small application for one of our customers. Since the project was in need of I18N support, we set up the TranslationServiceProvider with the Symfony/Translation component as the Silex documentation advised. Unfortunately I was not able to find a Twig extension allowing us to translate static content within a Twig template, so it was the time to jump in and develop an extension on my own and publish it on github. Simply drop the files in your vendors directory and include the lib/bitExpert/Silex/Autoloader.php file within your application and execute the steps listed below:

1. Setup Symfony/Translation provider:

$app->register(new Silex\Provider\TranslationServiceProvider(), array( 'locale_fallback' => 'en', 'translation.class_path' => 'vendor/symfony/src',));$app['translator.messages'] = array( 'en' => 'locales/en.yml', 'de' => 'locales/de.yml');$app['translator.loader'] = new Symfony\Component\Translation\Loader\YamlFileLoader();

2. To configure Twig, add the following lines to your index.php:

$app->register(new Silex\Provider\TwigServiceProvider(), array( 'twig.path' => __DIR__.'/views', 'twig.class_path' => __DIR__.'/vendor/twig/lib' )));

3. Finally we need to register the custom extension in Twig:

$app['twig']->addExtension(new bitExpert_Silex_Twig_Translation_Extension());

Using the translation extension within a twig template is quite simple:

{% translate my_translation_key %}

This will pass my_translation_key to Symfony/Translation and render the result within the twig template.