Fork of the silex web translator, in an attempt to make it compatible with bolt cms

silex, symfony, php, translation


Silex Web Translator


This Silex Provider allows you to easily manage the translation files for your app via a web-based interface. Current features include:

  • Dashboard for a quick overview of the current status of translations for your app including total translations, total locales and total untranslated strings.


  • A simple editor for translation strings, allowing you to quickly see which translation strings are missing for each locale

translation screen 1 translation screen 2


  • PHP 5.4+
  • Using YAML files for your translations. They must be formatted as <domain>.<locale>.yml. If you aren't using the domains featured of the Symfony Translation component then make sure you name your translation files messages.<locale>.yml.
  • For all usage of locales in your app use the ISO 639-1 language code, an underscore (_), then the ISO 3166-1 alpha-2 country code (e.g. fr_FR for French/France).
  • Make sure you configure all locales as fallbacks when setting up the TranslationProvider.


  • Configuration the default Silex TranslationServiceProvider in a similar way:
$app['locale'] = 'en_GB';
$app->register(new Silex\Provider\TranslationServiceProvider(), array(
    'locale_fallbacks' => array('en_GB', 'fr_FR', 'fi_FI'),

$app['translator'] = $app->share($app->extend('translator', function($translator, $app) {

    $translator->addLoader('yaml', new Symfony\Component\Translation\Loader\YamlFileLoader());

    $translator->addResource('yaml', __DIR__.'/../translations/messages.en_GB.yml', 'en_GB');
    $translator->addResource('yaml', __DIR__.'/../translations/messages.fr_FR.yml', 'fr_FR');
    $translator->addResource('yaml', __DIR__.'/../translations/messages.fi_FI.yml', 'fi_FI');
    $translator->addResource('yaml', __DIR__.'/../translations/rules.en_GB.yml', 'en_GB', 'rules');

    return $translator;
  • Make sure you are using and have registered the following service providers:
$app->register(new Silex\Provider\ServiceControllerServiceProvider());
$app->register(new Silex\Provider\UrlGeneratorServiceProvider());
$app->register(new Silex\Provider\FormServiceProvider());
$app->register(new Silex\Provider\ValidatorServiceProvider());
$app->register(new Silex\Provider\TwigServiceProvider());
  • Register the service provider and configure the options
$app['webtranslator.options'] = array(
    'translator_file_path' => __DIR__ . '/../translations/'
$app->register(new DC\WebTranslator\Provider\WebTranslatorServiceProvider());
  • Mount the controller provider
$app->mount('/webtranslator', new DC\WebTranslator\Controller\WebTranslatorControllerProvider());


How to protect the interface with user authentication?

  • You can protect the route you mount the controller on, as you would any other route, using the Symfony security component.

Known issues

  • If you import nested YML files with pretty new line (pipe) syntax, it will replace new lines with \r\n