diff --git a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md index db3d480b3e6c1..4be5961a9cfdf 100644 --- a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md +++ b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md @@ -4,6 +4,7 @@ CHANGELOG 3.4.0 ----- + * Added `translator.default_path` option and parameter * Session `use_strict_mode` is now enabled by default and the corresponding option has been deprecated * Made the `cache:clear` command to *not* clear "app" PSR-6 cache pools anymore, but to still clear "system" ones; use the `cache:pool:clear` command to clear "app" pools instead diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index 7c7cc59142173..cba3f2db01118 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -677,6 +677,10 @@ private function addTranslatorSection(ArrayNodeDefinition $rootNode) ->end() ->booleanNode('logging')->defaultValue($this->debug)->end() ->scalarNode('formatter')->defaultValue('translator.formatter.default')->end() + ->scalarNode('default_path') + ->info('The default path used to load translations') + ->defaultValue('%kernel.project_dir%/config/translations') + ->end() ->arrayNode('paths') ->prototype('scalar')->end() ->end() diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 99d6d77d67577..fc9390379ea06 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -1131,6 +1131,7 @@ private function registerTranslatorConfiguration(array $config, ContainerBuilder $translator->addMethodCall('setFallbackLocales', array($config['fallbacks'])); $container->setParameter('translator.logging', $config['logging']); + $container->setParameter('translator.default_path', $config['default_path']); // Discover translation directories $dirs = array(); @@ -1149,11 +1150,15 @@ private function registerTranslatorConfiguration(array $config, ContainerBuilder $dirs[] = dirname(dirname($r->getFileName())).'/Resources/translations'; } + $defaultDir = $container->getParameterBag()->resolveValue($config['default_path']); $rootDir = $container->getParameter('kernel.root_dir'); foreach ($container->getParameter('kernel.bundles_metadata') as $name => $bundle) { if ($container->fileExists($dir = $bundle['path'].'/Resources/translations')) { $dirs[] = $dir; } + if ($container->fileExists($dir = $defaultDir.'/'.$name)) { + $dirs[] = $dir; + } if ($container->fileExists($dir = $rootDir.sprintf('/Resources/%s/translations', $name))) { $dirs[] = $dir; } @@ -1167,6 +1172,9 @@ private function registerTranslatorConfiguration(array $config, ContainerBuilder } } + if ($container->fileExists($defaultDir)) { + $dirs[] = $defaultDir; + } if ($container->fileExists($dir = $rootDir.'/Resources/translations')) { $dirs[] = $dir; } diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php index 50122ed194e00..f86951e04837c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php @@ -257,6 +257,7 @@ protected static function getBundleDefaultConfig() 'logging' => true, 'formatter' => 'translator.formatter.default', 'paths' => array(), + 'default_path' => '%kernel.project_dir%/config/translations', ), 'validation' => array( 'enabled' => !class_exists(FullStack::class), diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/full.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/full.yml index fed4fa7d3e65f..2c5bbae850e9a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/full.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/full.yml @@ -42,6 +42,7 @@ framework: translator: enabled: true fallback: fr + default_path: '%kernel.root_dir%/config/translations' paths: ['%kernel.root_dir%/Fixtures/translations'] validation: enabled: true diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php index eec91cfbafdff..de998d1bcc36a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php @@ -503,6 +503,11 @@ public function testTranslator() $files, '->registerTranslatorConfiguration() finds translation resources in custom paths' ); + $this->assertContains( + strtr(__DIR__.'/config/translations/test_default.en.xlf', '/', DIRECTORY_SEPARATOR), + $files, + '->registerTranslatorConfiguration() finds translation resources in default path' + ); $calls = $container->getDefinition('translator.default')->getMethodCalls(); $this->assertEquals(array('fr'), $calls[1][1][0]); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/config/translations/test_default.en.xlf b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/config/translations/test_default.en.xlf new file mode 100644 index 0000000000000..e69de29bb2d1d