public function register(Application $app)
{
if (!isset($app['translator'])) {
$app->register(new Silex\Provider\TranslationServiceProvider(), ['locale_fallbacks' => ['en_GB', 'en']]);
}
$app['translator.caching'] = true;
if ($app['config']->get('general/caching/translations') === false) {
$app['translator.caching'] = false;
}
$app['translator.cache_dir'] = $app->share(function ($app) {
if ($app['translator.caching'] === false) {
return null;
}
return $app['resources']->getPath('cache/trans');
});
$app['translator'] = $app->share($app->extend('translator', function ($translator, $app) {
foreach ($app['translator.loaders'] as $format => $loader) {
$translator->addLoader($format, $loader);
}
return $translator;
}));
$app['translator.loaders'] = $app->share(function () {
return ['yml' => new TranslationLoader\YamlFileLoader(), 'xlf' => new TranslationLoader\XliffFileLoader()];
});
$app['translator.resources'] = $app->extend('translator.resources', function (array $resources, $app) {
$locale = $app['locale'];
$resources = array_merge($resources, static::addResources($app, $locale));
foreach ($app['locale_fallbacks'] as $fallback) {
if ($locale !== $fallback) {
$resources = array_merge($resources, static::addResources($app, $fallback));
}
}
return $resources;
});
$locales = (array) $app['config']->get('general/locale');
// Add fallback locales to list if they are not already there
$locales = array_unique(array_merge($locales, $app['locale_fallbacks']));
// Merge in generic versions of each locale
$locales = $this->mergeGenericLocales($locales);
// Merge in UTF-8 suffixes for each locale
$locales = $this->mergeUtf8Locales($locales);
// Set locales for native php...not sure why?
setlocale(LC_ALL, $locales);
$this->setDefaultTimezone($app);
// for javascript datetime calculations, timezone offset. e.g. "+02:00"
$app['timezone_offset'] = date('P');
}