diff --git a/src/DI/TranslationExtension.php b/src/DI/TranslationExtension.php index 007daed..43188b9 100644 --- a/src/DI/TranslationExtension.php +++ b/src/DI/TranslationExtension.php @@ -56,6 +56,7 @@ public function getConfigSchema(): Nette\Schema\Schema ]), 'translatorFactory' => Expect::string()->default(null), 'returnOriginalMessage' => Expect::bool()->default(false), + 'autowired' => Expect::type('bool|array')->default(true), ]); } @@ -113,6 +114,23 @@ public function loadConfiguration(): void $configCacheFactory = $builder->addDefinition($this->prefix('configCacheFactory')) ->setFactory($this->config->cache->factory, [$this->config->debug]); + $autowired = []; + + if ($this->config->autowired) { + $autowired = [ + Nette\Localization\ITranslator::class, + Symfony\Contracts\Translation\TranslatorInterface::class, + Contributte\Translation\Translator::class, + ]; + + } elseif (is_array($this->config->autowired)) { + $autowired = $this->config->autowired; + } + + if (is_array($this->config->autowired)) { + $autowired = $this->config->autowired; + } + // Translator if ($this->config->translatorFactory !== null) { $reflectionTranslatorFactory = new ReflectionClass($this->config->translatorFactory); @@ -123,6 +141,9 @@ public function loadConfiguration(): void $factory = $this->config->translatorFactory; + if ($this->config->autowired) { + $autowired[] = $factory; + } } else { $factory = Contributte\Translation\Translator::class; } @@ -132,8 +153,13 @@ public function loadConfiguration(): void ->addSetup('setLocalesWhitelist', [$this->config->locales->whitelist]) ->addSetup('setConfigCacheFactory', [$configCacheFactory]) ->addSetup('setFallbackLocales', [$this->config->locales->fallback]) - ->addSetup('$returnOriginalMessage', [$this->config->returnOriginalMessage]) - ->setAutowired([Nette\Localization\ITranslator::class, Symfony\Contracts\Translation\TranslatorInterface::class]); + ->addSetup('$returnOriginalMessage', [$this->config->returnOriginalMessage]); + + if ($this->config->autowired === false) { + $translator->setAutowired(false); + } else { + $translator->setAutowired($autowired); + } // Loaders foreach ($this->config->loaders as $k1 => $v1) { @@ -182,7 +208,7 @@ public function beforeCompile(): void if ($latteFactoryName !== null) { $latteFilters = $builder->addDefinition($this->prefix('latte.filters')) - ->setFactory(Contributte\Translation\Latte\Filters::class); + ->setFactory(Contributte\Translation\Latte\Filters::class, [$translator]); /** @var Nette\DI\Definitions\FactoryDefinition $latteFactory */ $latteFactory = $builder->getDefinition($latteFactoryName); diff --git a/tests/Tests/DI/TranslationExtension.phpt b/tests/Tests/DI/TranslationExtension.phpt index 66ee01a..24cb85b 100644 --- a/tests/Tests/DI/TranslationExtension.phpt +++ b/tests/Tests/DI/TranslationExtension.phpt @@ -159,6 +159,9 @@ class TranslationExtension extends Tests\TestAbstract $symfonyTranslator = $container->getByType(Symfony\Contracts\Translation\TranslatorInterface::class); Tester\Assert::same($translator, $symfonyTranslator); + + $contributteTranslator = $container->getByType(Contributte\Translation\Translator::class); + Tester\Assert::same($translator, $contributteTranslator); } public function test04(): void @@ -201,6 +204,9 @@ class TranslationExtension extends Tests\TestAbstract $translator = $container->getByType(Nette\Localization\ITranslator::class); Tester\Assert::type(Tests\CustomTranslatorMock::class, $translator); + + $factoryTranslator = $container->getByType(Tests\CustomTranslatorMock::class); + Tester\Assert::same($translator, $factoryTranslator); } public function test07(): void @@ -217,6 +223,49 @@ class TranslationExtension extends Tests\TestAbstract Tester\Assert::false($translator->returnOriginalMessage); } + public function test08(): void + { + $container = Tests\Helpers::createContainerFromConfigurator($this->container->getParameters()['tempDir'], [ + 'translation' => [ + 'returnOriginalMessage' => false, + ], + ]); + + /** @var Contributte\Translation\Translator $translator */ + $translator = $container->getByType(Nette\Localization\ITranslator::class); + + Tester\Assert::false($translator->returnOriginalMessage); + } + + public function test09(): void + { + $container = Tests\Helpers::createContainerFromConfigurator($this->container->getParameters()['tempDir'], [ + 'translation' => [ + 'autowired' => false, + ], + ]); + + $translator = $container->getByType(Nette\Localization\ITranslator::class, false); + + Tester\Assert::null($translator); + + $container = Tests\Helpers::createContainerFromConfigurator($this->container->getParameters()['tempDir'], [ + 'translation' => [ + 'autowired' => [ + Contributte\Translation\Translator::class, + ], + ], + ]); + + $translator = $container->getByType(Nette\Localization\ITranslator::class, false); + + Tester\Assert::null($translator); + + $translator = $container->getByType(Contributte\Translation\Translator::class, false); + + Tester\Assert::true($translator instanceof Contributte\Translation\Translator); + } + } (new TranslationExtension($container))->run();