Kdyby\Translation\DI\TranslationExtension::beforeCompile PHP Method

beforeCompile() public method

public beforeCompile ( )
    public function beforeCompile()
    {
        $builder = $this->getContainerBuilder();
        $config = $this->getConfig();
        $this->beforeCompileLogging($config);
        $registerToLatte = function (Nette\DI\ServiceDefinition $def) {
            $def->addSetup('?->onCompile[] = function($engine) { Kdyby\\Translation\\Latte\\TranslateMacros::install($engine->getCompiler()); }', ['@self']);
            if (method_exists('Latte\\Engine', 'addProvider')) {
                // Nette 2.4
                $def->addSetup('addProvider', ['translator', $this->prefix('@default')])->addSetup('addFilter', ['translate', [$this->prefix('@helpers'), 'translateFilterAware']]);
            } else {
                $def->addSetup('addFilter', ['getTranslator', [$this->prefix('@helpers'), 'getTranslator']])->addSetup('addFilter', ['translate', [$this->prefix('@helpers'), 'translate']]);
            }
        };
        $latteFactoryService = $builder->getByType('Nette\\Bridges\\ApplicationLatte\\ILatteFactory');
        if (!$latteFactoryService || !self::isOfType($builder->getDefinition($latteFactoryService)->getClass(), 'Latte\\engine')) {
            $latteFactoryService = 'nette.latteFactory';
        }
        if ($builder->hasDefinition($latteFactoryService) && self::isOfType($builder->getDefinition($latteFactoryService)->getClass(), 'Latte\\Engine')) {
            $registerToLatte($builder->getDefinition($latteFactoryService));
        }
        if ($builder->hasDefinition('nette.latte')) {
            $registerToLatte($builder->getDefinition('nette.latte'));
        }
        $applicationService = $builder->getByType('Nette\\Application\\Application') ?: 'application';
        if ($builder->hasDefinition($applicationService)) {
            $builder->getDefinition($applicationService)->addSetup('$service->onRequest[] = ?', [[$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(?); }', [$this->prefix('default')])->addSetup('$service->onRequest[] = ?', [[$this->prefix('@panel'), 'onRequest']]);
            }
        }
        if (class_exists('Tracy\\Debugger')) {
            Kdyby\Translation\Diagnostics\Panel::registerBluescreen();
        }
        $extractor = $builder->getDefinition($this->prefix('extractor'));
        foreach ($builder->findByTag(self::TAG_EXTRACTOR) as $extractorId => $meta) {
            Validators::assert($meta, 'string:2..');
            $extractor->addSetup('addExtractor', [$meta, '@' . $extractorId]);
            $builder->getDefinition($extractorId)->setAutowired(FALSE)->setInject(FALSE);
        }
        $writer = $builder->getDefinition($this->prefix('writer'));
        foreach ($builder->findByTag(self::TAG_DUMPER) as $dumperId => $meta) {
            Validators::assert($meta, 'string:2..');
            $writer->addSetup('addDumper', [$meta, '@' . $dumperId]);
            $builder->getDefinition($dumperId)->setAutowired(FALSE)->setInject(FALSE);
        }
        $this->loaders = [];
        foreach ($builder->findByTag(self::TAG_LOADER) 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', [$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);
        }
    }