public function beforeCompile()
{
$builder = $this->getContainerBuilder();
$config = $this->getConfig();
$self = $this;
$registerToLatte = function (Nette\DI\ServiceDefinition $def) use($self) {
$def->addSetup('?->onCompile[] = function($engine) { Kdyby\\Translation\\Latte\\TranslateMacros::install($engine->getCompiler()); }', array('@self'))->addSetup('addFilter', array('translate', array($self->prefix('@helpers'), 'translate')))->addSetup('addFilter', array('getTranslator', array($self->prefix('@helpers'), 'getTranslator')));
};
$latteFactoryService = $builder->getByType('Nette\\Bridges\\ApplicationLatte\\ILatteFactory') ?: 'nette.latteFactory';
if ($builder->hasDefinition($latteFactoryService)) {
$registerToLatte($builder->getDefinition($latteFactoryService));
}
if ($builder->hasDefinition('nette.latte')) {
$registerToLatte($builder->getDefinition('nette.latte'));
}
$applicationService = $builder->getByType('Nette\\Application\\Application') ?: 'application';
$builder->getDefinition($applicationService)->addSetup('$service->onRequest[] = ?', array(array($this->prefix('@userLocaleResolver.param'), 'onRequest')));
if ($config['debugger'] && interface_exists('Tracy\\IBarPanel')) {
$builder->getDefinition($applicationService)->addSetup('$self = $this; $service->onStartup[] = function () use ($self) { $self->getService(?); }', array($this->prefix('default')))->addSetup('$service->onRequest[] = ?', array(array($this->prefix('@panel'), 'onRequest')));
}
Kdyby\Translation\Diagnostics\Panel::registerBluescreen();
$extractor = $builder->getDefinition($this->prefix('extractor'));
foreach ($builder->findByTag(self::EXTRACTOR_TAG) as $extractorId => $meta) {
Validators::assert($meta, 'string:2..');
$extractor->addSetup('addExtractor', array($meta, '@' . $extractorId));
$builder->getDefinition($extractorId)->setAutowired(FALSE)->setInject(FALSE);
}
$writer = $builder->getDefinition($this->prefix('writer'));
foreach ($builder->findByTag(self::DUMPER_TAG) as $dumperId => $meta) {
Validators::assert($meta, 'string:2..');
$writer->addSetup('addDumper', array($meta, '@' . $dumperId));
$builder->getDefinition($dumperId)->setAutowired(FALSE)->setInject(FALSE);
}
$this->loaders = array();
foreach ($builder->findByTag(self::LOADER_TAG) as $loaderId => $meta) {
Validators::assert($meta, 'string:2..');
$builder->getDefinition($loaderId)->setAutowired(FALSE)->setInject(FALSE);
$this->loaders[$meta] = $loaderId;
}
$builder->getDefinition($this->prefix('loader'))->addSetup('injectServiceIds', array($this->loaders))->setInject(FALSE);
foreach ($this->compiler->getExtensions() as $extension) {
if (!$extension instanceof ITranslationProvider) {
continue;
}
$config['dirs'] = array_merge($config['dirs'], array_values($extension->getTranslationResources()));
}
if ($dirs = array_values(array_filter($config['dirs'], Callback::closure('is_dir')))) {
foreach ($dirs as $dir) {
$builder->addDependency($dir);
}
$this->loadResourcesFromDirs($dirs);
}
}