diff --git a/UPGRADE-3.4.md b/UPGRADE-3.4.md index 7ef52c3c44f8b..5408251e98968 100644 --- a/UPGRADE-3.4.md +++ b/UPGRADE-3.4.md @@ -114,6 +114,12 @@ FrameworkBundle class has been deprecated and will be removed in 4.0. Use the `Symfony\Component\Translation\DependencyInjection\TranslatorPass` class instead. + * The `Symfony\Bundle\FrameworkBundle\Translation\TranslationLoader` + class has been deprecated and will be removed in 4.0. Use the + `Symfony\Component\Translation\Reader\TranslationReader` class instead. + + * The `translation.loader` service has been deprecated and will be removed in 4.0. Use the `translation.reader` service instead. + HttpKernel ---------- diff --git a/UPGRADE-4.0.md b/UPGRADE-4.0.md index cad8e7df786cb..0b9a727a17368 100644 --- a/UPGRADE-4.0.md +++ b/UPGRADE-4.0.md @@ -414,7 +414,13 @@ FrameworkBundle * The `Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TranslatorPass` class has been removed. Use the `Symfony\Component\Translation\DependencyInjection\TranslatorPass` class instead. + + * The `Symfony\Bundle\FrameworkBundle\Translation\TranslationLoader` + class has been deprecated and will be removed in 4.0. Use the + `Symfony\Component\Translation\Reader\TranslationReader` class instead. + * The `translation.loader` service has been deprecated and will be removed in 4.0. Use the `translation.reader` service instead. + HttpFoundation -------------- @@ -581,6 +587,8 @@ Translation * Removed the backup feature from the file dumper classes. + * The default value of the `$readerServiceId` argument of `TranslatorPass::__construct()` has been changed to `"translation.reader"`. + * Removed `Symfony\Component\Translation\Writer\TranslationWriter::writeTranslations`, use `Symfony\Component\Translation\Writer\TranslationWriter::write` instead. diff --git a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md index 5bf7ee620957a..4a51222f7e90d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md +++ b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md @@ -23,6 +23,9 @@ CHANGELOG name as value, using it makes the command lazy * Added `cache:pool:prune` command to allow manual stale cache item pruning of supported PSR-6 and PSR-16 cache pool implementations + * Deprecated `Symfony\Bundle\FrameworkBundle\Translation\TranslationLoader`, use + `Symfony\Component\Translation\Reader\TranslationReader` instead + * Deprecated `translation.loader` service, use `translation.reader` instead 3.3.0 ----- diff --git a/src/Symfony/Bundle/FrameworkBundle/Command/TranslationDebugCommand.php b/src/Symfony/Bundle/FrameworkBundle/Command/TranslationDebugCommand.php index cbf6bda5f3fff..e4e16960fc577 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Command/TranslationDebugCommand.php +++ b/src/Symfony/Bundle/FrameworkBundle/Command/TranslationDebugCommand.php @@ -11,7 +11,6 @@ namespace Symfony\Bundle\FrameworkBundle\Command; -use Symfony\Bundle\FrameworkBundle\Translation\TranslationLoader; use Symfony\Component\Console\Style\SymfonyStyle; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputArgument; @@ -21,6 +20,7 @@ use Symfony\Component\Translation\Catalogue\MergeOperation; use Symfony\Component\Translation\Extractor\ExtractorInterface; use Symfony\Component\Translation\MessageCatalogue; +use Symfony\Component\Translation\Reader\TranslationReaderInterface; use Symfony\Component\Translation\Translator; use Symfony\Component\Translation\DataCollectorTranslator; use Symfony\Component\Translation\LoggingTranslator; @@ -43,15 +43,15 @@ class TranslationDebugCommand extends ContainerAwareCommand protected static $defaultName = 'debug:translation'; private $translator; - private $loader; + private $reader; private $extractor; /** - * @param TranslatorInterface $translator - * @param TranslationLoader $loader - * @param ExtractorInterface $extractor + * @param TranslatorInterface $translator + * @param TranslationReaderInterface $reader + * @param ExtractorInterface $extractor */ - public function __construct($translator = null, TranslationLoader $loader = null, ExtractorInterface $extractor = null) + public function __construct($translator = null, TranslationReaderInterface $reader = null, ExtractorInterface $extractor = null) { if (!$translator instanceof TranslatorInterface) { @trigger_error(sprintf('Passing a command name as the first argument of "%s" is deprecated since version 3.4 and will be removed in 4.0. If the command was registered by convention, make it a service instead.', __METHOD__), E_USER_DEPRECATED); @@ -64,7 +64,7 @@ public function __construct($translator = null, TranslationLoader $loader = null parent::__construct(); $this->translator = $translator; - $this->loader = $loader; + $this->reader = $reader; $this->extractor = $extractor; } @@ -142,7 +142,7 @@ protected function execute(InputInterface $input, OutputInterface $output) // BC to be removed in 4.0 if (null === $this->translator) { $this->translator = $this->getContainer()->get('translator'); - $this->loader = $this->getContainer()->get('translation.loader'); + $this->reader = $this->getContainer()->get('translation.reader'); $this->extractor = $this->getContainer()->get('translation.extractor'); } @@ -331,7 +331,7 @@ private function loadCurrentMessages($locale, $transPaths) foreach ($transPaths as $path) { $path = $path.'translations'; if (is_dir($path)) { - $this->loader->loadMessages($path, $currentCatalogue); + $this->reader->read($path, $currentCatalogue); } } @@ -357,7 +357,7 @@ private function loadFallbackCatalogues($locale, $transPaths) foreach ($transPaths as $path) { $path = $path.'translations'; if (is_dir($path)) { - $this->loader->loadMessages($path, $fallbackCatalogue); + $this->reader->read($path, $fallbackCatalogue); } } $fallbackCatalogues[] = $fallbackCatalogue; diff --git a/src/Symfony/Bundle/FrameworkBundle/Command/TranslationUpdateCommand.php b/src/Symfony/Bundle/FrameworkBundle/Command/TranslationUpdateCommand.php index abbe1e3b5460c..ff35fda56e1ef 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Command/TranslationUpdateCommand.php +++ b/src/Symfony/Bundle/FrameworkBundle/Command/TranslationUpdateCommand.php @@ -11,7 +11,6 @@ namespace Symfony\Bundle\FrameworkBundle\Command; -use Symfony\Bundle\FrameworkBundle\Translation\TranslationLoader; use Symfony\Component\Console\Style\SymfonyStyle; use Symfony\Component\Translation\Catalogue\TargetOperation; use Symfony\Component\Translation\Catalogue\MergeOperation; @@ -21,6 +20,7 @@ use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Translation\Extractor\ExtractorInterface; use Symfony\Component\Translation\MessageCatalogue; +use Symfony\Component\Translation\Reader\TranslationReaderInterface; use Symfony\Component\Translation\Writer\TranslationWriterInterface; /** @@ -36,17 +36,17 @@ class TranslationUpdateCommand extends ContainerAwareCommand protected static $defaultName = 'translation:update'; private $writer; - private $loader; + private $reader; private $extractor; private $defaultLocale; /** * @param TranslationWriterInterface $writer - * @param TranslationLoader $loader + * @param TranslationReaderInterface $reader * @param ExtractorInterface $extractor * @param string $defaultLocale */ - public function __construct($writer = null, TranslationLoader $loader = null, ExtractorInterface $extractor = null, $defaultLocale = null) + public function __construct($writer = null, TranslationReaderInterface $reader = null, ExtractorInterface $extractor = null, $defaultLocale = null) { if (!$writer instanceof TranslationWriterInterface) { @trigger_error(sprintf('Passing a command name as the first argument of "%s" is deprecated since version 3.4 and will be removed in 4.0. If the command was registered by convention, make it a service instead.', __METHOD__), E_USER_DEPRECATED); @@ -59,7 +59,7 @@ public function __construct($writer = null, TranslationLoader $loader = null, Ex parent::__construct(); $this->writer = $writer; - $this->loader = $loader; + $this->reader = $reader; $this->extractor = $extractor; $this->defaultLocale = $defaultLocale; } @@ -127,7 +127,7 @@ protected function execute(InputInterface $input, OutputInterface $output) // BC to be removed in 4.0 if (null === $this->writer) { $this->writer = $this->getContainer()->get('translation.writer'); - $this->loader = $this->getContainer()->get('translation.loader'); + $this->reader = $this->getContainer()->get('translation.reader'); $this->extractor = $this->getContainer()->get('translation.extractor'); $this->defaultLocale = $this->getContainer()->getParameter('kernel.default_locale'); } @@ -201,7 +201,7 @@ protected function execute(InputInterface $input, OutputInterface $output) foreach ($transPaths as $path) { $path .= 'translations'; if (is_dir($path)) { - $this->loader->loadMessages($path, $currentCatalogue); + $this->reader->read($path, $currentCatalogue); } } diff --git a/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php b/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php index c53deb16e2fa4..47129136d7920 100644 --- a/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php +++ b/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php @@ -96,7 +96,10 @@ public function build(ContainerBuilder $container) $container->addCompilerPass(new AddAnnotationsCachedReaderPass(), PassConfig::TYPE_BEFORE_REMOVING); $this->addCompilerPassIfExists($container, AddValidatorInitializersPass::class); $this->addCompilerPassIfExists($container, AddConsoleCommandPass::class); - $this->addCompilerPassIfExists($container, TranslatorPass::class); + if (class_exists(TranslatorPass::class)) { + // Arguments to be removed in 4.0, relying on the default values + $container->addCompilerPass(new TranslatorPass('translator.default', 'translation.loader')); + } $container->addCompilerPass(new LoggingTranslatorPass()); $container->addCompilerPass(new AddCacheWarmerPass()); $container->addCompilerPass(new AddCacheClearerPass()); diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/translation.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/translation.xml index cd0a983010c8a..cfe05f5148fdd 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/translation.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/translation.xml @@ -121,7 +121,10 @@ - + + The "%service_id%" service is deprecated since Symfony 3.4 and will be removed in 4.0. Use "translation.reader" instead. + + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Command/TranslationDebugCommandTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Command/TranslationDebugCommandTest.php index edf006c86801c..ff7cab4589b02 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Command/TranslationDebugCommandTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Command/TranslationDebugCommandTest.php @@ -130,10 +130,10 @@ private function createCommandTester($extractedMessages = array(), $loadedMessag }) ); - $loader = $this->getMockBuilder('Symfony\Bundle\FrameworkBundle\Translation\TranslationLoader')->getMock(); + $loader = $this->getMockBuilder('Symfony\Component\Translation\Reader\TranslationReader')->getMock(); $loader ->expects($this->any()) - ->method('loadMessages') + ->method('read') ->will( $this->returnCallback(function ($path, $catalogue) use ($loadedMessages) { $catalogue->add($loadedMessages); @@ -197,7 +197,7 @@ public function testLegacyDebugCommand() ->method('get') ->will($this->returnValueMap(array( array('translation.extractor', 1, $extractor), - array('translation.loader', 1, $loader), + array('translation.reader', 1, $loader), array('translator', 1, $translator), array('kernel', 1, $kernel), ))); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Command/TranslationUpdateCommandTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Command/TranslationUpdateCommandTest.php index db61398b26d9a..b0804503eb79f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Command/TranslationUpdateCommandTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Command/TranslationUpdateCommandTest.php @@ -101,10 +101,10 @@ private function createCommandTester($extractedMessages = array(), $loadedMessag }) ); - $loader = $this->getMockBuilder('Symfony\Bundle\FrameworkBundle\Translation\TranslationLoader')->getMock(); + $loader = $this->getMockBuilder('Symfony\Component\Translation\Reader\TranslationReader')->getMock(); $loader ->expects($this->any()) - ->method('loadMessages') + ->method('read') ->will( $this->returnCallback(function ($path, $catalogue) use ($loadedMessages) { $catalogue->add($loadedMessages); @@ -177,7 +177,7 @@ public function testLegacyUpdateCommand() ->method('get') ->will($this->returnValueMap(array( array('translation.extractor', 1, $extractor), - array('translation.loader', 1, $loader), + array('translation.reader', 1, $loader), array('translation.writer', 1, $writer), array('translator', 1, $translator), array('kernel', 1, $kernel), diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php index b7d261959c57f..d63a74c874f02 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php @@ -1000,7 +1000,7 @@ protected function createContainerFromFile($file, $data = array(), $resetCompile $container->getCompilerPassConfig()->setOptimizationPasses(array()); $container->getCompilerPassConfig()->setRemovingPasses(array()); } - $container->getCompilerPassConfig()->setBeforeRemovingPasses(array(new AddAnnotationsCachedReaderPass(), new AddConstraintValidatorsPass(), new TranslatorPass())); + $container->getCompilerPassConfig()->setBeforeRemovingPasses(array(new AddAnnotationsCachedReaderPass(), new AddConstraintValidatorsPass(), new TranslatorPass('translator.default', 'translation.reader'))); $container->compile(); return self::$containerCache[$cacheKey] = $container; diff --git a/src/Symfony/Bundle/FrameworkBundle/Translation/TranslationLoader.php b/src/Symfony/Bundle/FrameworkBundle/Translation/TranslationLoader.php index b6377863afe48..b125c75c0676c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Translation/TranslationLoader.php +++ b/src/Symfony/Bundle/FrameworkBundle/Translation/TranslationLoader.php @@ -11,35 +11,16 @@ namespace Symfony\Bundle\FrameworkBundle\Translation; -use Symfony\Component\Finder\Finder; +use Symfony\Component\Translation\Reader\TranslationReader; use Symfony\Component\Translation\MessageCatalogue; -use Symfony\Component\Translation\Loader\LoaderInterface; + +@trigger_error(sprintf('The class "%s" is deprecated since version 3.4 and will be removed in 4.0. Use "%s" instead. ', TranslationLoader::class, TranslationReader::class), E_USER_DEPRECATED); /** - * TranslationLoader loads translation messages from translation files. - * - * @author Michel Salib + * @deprecated since version 3.4 and will be removed in 4.0. Use Symfony\Component\Translation\Reader\TranslationReader instead */ -class TranslationLoader +class TranslationLoader extends TranslationReader { - /** - * Loaders used for import. - * - * @var array - */ - private $loaders = array(); - - /** - * Adds a loader to the translation extractor. - * - * @param string $format The format of the loader - * @param LoaderInterface $loader - */ - public function addLoader($format, LoaderInterface $loader) - { - $this->loaders[$format] = $loader; - } - /** * Loads translation messages from a directory to the catalogue. * @@ -48,19 +29,6 @@ public function addLoader($format, LoaderInterface $loader) */ public function loadMessages($directory, MessageCatalogue $catalogue) { - if (!is_dir($directory)) { - return; - } - - foreach ($this->loaders as $format => $loader) { - // load any existing translation files - $finder = new Finder(); - $extension = $catalogue->getLocale().'.'.$format; - $files = $finder->files()->name('*.'.$extension)->in($directory); - foreach ($files as $file) { - $domain = substr($file->getFilename(), 0, -1 * strlen($extension) - 1); - $catalogue->addCatalogue($loader->load($file->getPathname(), $catalogue->getLocale(), $domain)); - } - } + $this->read($directory, $catalogue); } } diff --git a/src/Symfony/Component/Translation/CHANGELOG.md b/src/Symfony/Component/Translation/CHANGELOG.md index 65fae7eda8508..cdd11cb91be6c 100644 --- a/src/Symfony/Component/Translation/CHANGELOG.md +++ b/src/Symfony/Component/Translation/CHANGELOG.md @@ -7,6 +7,7 @@ CHANGELOG * Added `TranslationDumperPass` * Added `TranslationExtractorPass` * Added `TranslatorPass` + * Added `TranslationReader` and `TranslationReaderInterface` * Added `` section to the Xliff 2.0 dumper. * Improved Xliff 2.0 loader to load `` section. * Added `TranslationWriterInterface` diff --git a/src/Symfony/Component/Translation/DependencyInjection/TranslatorPass.php b/src/Symfony/Component/Translation/DependencyInjection/TranslatorPass.php index e144f6b74ef10..07fc9f68f0152 100644 --- a/src/Symfony/Component/Translation/DependencyInjection/TranslatorPass.php +++ b/src/Symfony/Component/Translation/DependencyInjection/TranslatorPass.php @@ -19,13 +19,17 @@ class TranslatorPass implements CompilerPassInterface { private $translatorServiceId; - private $loaderServiceId; + private $readerServiceId; private $loaderTag; - public function __construct($translatorServiceId = 'translator.default', $loaderServiceId = 'translation.loader', $loaderTag = 'translation.loader') + public function __construct($translatorServiceId = 'translator.default', $readerServiceId = 'translation.loader', $loaderTag = 'translation.loader') { + if ('translation.loader' === $readerServiceId && 2 > func_num_args()) { + @trigger_error('The default value for $readerServiceId will change in 4.0 to "translation.reader".', E_USER_DEPRECATED); + } + $this->translatorServiceId = $translatorServiceId; - $this->loaderServiceId = $loaderServiceId; + $this->readerServiceId = $readerServiceId; $this->loaderTag = $loaderTag; } @@ -45,8 +49,8 @@ public function process(ContainerBuilder $container) } } - if ($container->hasDefinition($this->loaderServiceId)) { - $definition = $container->getDefinition($this->loaderServiceId); + if ($container->hasDefinition($this->readerServiceId)) { + $definition = $container->getDefinition($this->readerServiceId); foreach ($loaders as $id => $formats) { foreach ($formats as $format) { $definition->addMethodCall('addLoader', array($format, $loaderRefs[$id])); @@ -54,6 +58,18 @@ public function process(ContainerBuilder $container) } } + // Duplicated code to support "translation.reader", to be removed in 4.0 + if ('translation.reader' !== $this->readerServiceId) { + if ($container->hasDefinition('translation.reader')) { + $definition = $container->getDefinition('translation.reader'); + foreach ($loaders as $id => $formats) { + foreach ($formats as $format) { + $definition->addMethodCall('addLoader', array($format, $loaderRefs[$id])); + } + } + } + } + $container ->findDefinition($this->translatorServiceId) ->replaceArgument(0, ServiceLocatorTagPass::register($container, $loaderRefs)) diff --git a/src/Symfony/Component/Translation/Reader/TranslationReader.php b/src/Symfony/Component/Translation/Reader/TranslationReader.php new file mode 100644 index 0000000000000..d2ad774e28794 --- /dev/null +++ b/src/Symfony/Component/Translation/Reader/TranslationReader.php @@ -0,0 +1,63 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Reader; + +use Symfony\Component\Finder\Finder; +use Symfony\Component\Translation\Loader\LoaderInterface; +use Symfony\Component\Translation\MessageCatalogue; + +/** + * TranslationReader reads translation messages from translation files. + * + * @author Michel Salib + */ +class TranslationReader implements TranslationReaderInterface +{ + /** + * Loaders used for import. + * + * @var array + */ + private $loaders = array(); + + /** + * Adds a loader to the translation extractor. + * + * @param string $format The format of the loader + * @param LoaderInterface $loader + */ + public function addLoader($format, LoaderInterface $loader) + { + $this->loaders[$format] = $loader; + } + + /** + * {@inheritdoc} + */ + public function read($directory, MessageCatalogue $catalogue) + { + if (!is_dir($directory)) { + return; + } + + foreach ($this->loaders as $format => $loader) { + // load any existing translation files + $finder = new Finder(); + $extension = $catalogue->getLocale().'.'.$format; + $files = $finder->files()->name('*.'.$extension)->in($directory); + foreach ($files as $file) { + $domain = substr($file->getFilename(), 0, -1 * strlen($extension) - 1); + $catalogue->addCatalogue($loader->load($file->getPathname(), $catalogue->getLocale(), $domain)); + } + } + } +} diff --git a/src/Symfony/Component/Translation/Reader/TranslationReaderInterface.php b/src/Symfony/Component/Translation/Reader/TranslationReaderInterface.php new file mode 100644 index 0000000000000..0aa55c6d367dc --- /dev/null +++ b/src/Symfony/Component/Translation/Reader/TranslationReaderInterface.php @@ -0,0 +1,30 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Reader; + +use Symfony\Component\Translation\MessageCatalogue; + +/** + * TranslationReader reads translation messages from translation files. + * + * @author Tobias Nyholm + */ +interface TranslationReaderInterface +{ + /** + * Reads translation messages from a directory to the catalogue. + * + * @param string $directory + * @param MessageCatalogue $catalogue + */ + public function read($directory, MessageCatalogue $catalogue); +} diff --git a/src/Symfony/Component/Translation/Tests/DependencyInjection/TranslationPassTest.php b/src/Symfony/Component/Translation/Tests/DependencyInjection/TranslationPassTest.php index 8a4dff70a7946..c0274738d0f0d 100644 --- a/src/Symfony/Component/Translation/Tests/DependencyInjection/TranslationPassTest.php +++ b/src/Symfony/Component/Translation/Tests/DependencyInjection/TranslationPassTest.php @@ -25,26 +25,79 @@ public function testValidCollector() $loader = (new Definition()) ->addTag('translation.loader', array('alias' => 'xliff', 'legacy-alias' => 'xlf')); + $reader = new Definition(); + $translator = (new Definition()) ->setArguments(array(null, null, null, null)); $container = new ContainerBuilder(); $container->setDefinition('translator.default', $translator); - $container->setDefinition('translation.loader', $loader); + $container->setDefinition('translation.reader', $reader); + $container->setDefinition('translation.xliff_loader', $loader); + + $pass = new TranslatorPass('translator.default', 'translation.reader'); + $pass->process($container); + + $expectedReader = (new Definition()) + ->addMethodCall('addLoader', array('xliff', new Reference('translation.xliff_loader'))) + ->addMethodCall('addLoader', array('xlf', new Reference('translation.xliff_loader'))) + ; + $this->assertEquals($expectedReader, $reader); + + $expectedLoader = (new Definition()) + ->addTag('translation.loader', array('alias' => 'xliff', 'legacy-alias' => 'xlf')) + ; + $this->assertEquals($expectedLoader, $loader); + + $this->assertSame(array('translation.xliff_loader' => array('xliff', 'xlf')), $translator->getArgument(3)); + + $expected = array('translation.xliff_loader' => new ServiceClosureArgument(new Reference('translation.xliff_loader'))); + $this->assertEquals($expected, $container->getDefinition((string) $translator->getArgument(0))->getArgument(0)); + } + + /** + * @group legacy + * @expectedDeprecation The default value for $readerServiceId will change in 4.0 to "translation.reader". + * + * A test that verifies the deprecated "translation.loader" gets the LoaderInterfaces added. + * + * This test should be removed in 4.0. + */ + public function testValidCollectorWithDeprecatedTranslationLoader() + { + $loader = (new Definition()) + ->addTag('translation.loader', array('alias' => 'xliff', 'legacy-alias' => 'xlf')); + + $legacyReader = new Definition(); + $reader = new Definition(); + + $translator = (new Definition()) + ->setArguments(array(null, null, null, null)); + + $container = new ContainerBuilder(); + $container->setDefinition('translator.default', $translator); + $container->setDefinition('translation.loader', $legacyReader); + $container->setDefinition('translation.reader', $reader); + $container->setDefinition('translation.xliff_loader', $loader); $pass = new TranslatorPass(); $pass->process($container); - $expected = (new Definition()) + $expectedReader = (new Definition()) + ->addMethodCall('addLoader', array('xliff', new Reference('translation.xliff_loader'))) + ->addMethodCall('addLoader', array('xlf', new Reference('translation.xliff_loader'))) + ; + $this->assertEquals($expectedReader, $legacyReader); + $this->assertEquals($expectedReader, $reader); + + $expectedLoader = (new Definition()) ->addTag('translation.loader', array('alias' => 'xliff', 'legacy-alias' => 'xlf')) - ->addMethodCall('addLoader', array('xliff', new Reference('translation.loader'))) - ->addMethodCall('addLoader', array('xlf', new Reference('translation.loader'))) ; - $this->assertEquals($expected, $loader); + $this->assertEquals($expectedLoader, $loader); - $this->assertSame(array('translation.loader' => array('xliff', 'xlf')), $translator->getArgument(3)); + $this->assertSame(array('translation.xliff_loader' => array('xliff', 'xlf')), $translator->getArgument(3)); - $expected = array('translation.loader' => new ServiceClosureArgument(new Reference('translation.loader'))); + $expected = array('translation.xliff_loader' => new ServiceClosureArgument(new Reference('translation.xliff_loader'))); $this->assertEquals($expected, $container->getDefinition((string) $translator->getArgument(0))->getArgument(0)); } } diff --git a/src/Symfony/Component/Translation/composer.json b/src/Symfony/Component/Translation/composer.json index 0c4c89dd48a35..48873b98268c4 100644 --- a/src/Symfony/Component/Translation/composer.json +++ b/src/Symfony/Component/Translation/composer.json @@ -24,6 +24,7 @@ "symfony/dependency-injection": "~3.4|~4.0", "symfony/intl": "^2.8.18|^3.2.5|~4.0", "symfony/yaml": "~3.3|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", "psr/log": "~1.0" }, "conflict": { pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy