From 4b593b08d1c38c9b07fcc05fd434ff379e61deb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Sch=C3=A4dlich?= Date: Wed, 8 May 2019 09:16:31 +0200 Subject: [PATCH] [FrameworkBundle] Allow dots in translation domains --- .../DependencyInjection/FrameworkExtension.php | 5 +++-- .../Fixtures/translations/domain.with.dots.en.yml | 3 +++ .../FrameworkExtensionTest.php | 5 +++++ .../translations/domain.with.dots.en.yml | 1 + .../Tests/Translation/TranslatorTest.php | 15 +++++++++++++++ .../FrameworkBundle/Translation/Translator.php | 5 ++++- 6 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/translations/domain.with.dots.en.yml create mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Resources/translations/domain.with.dots.en.yml diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index a1d03e7280f9..d5a024fb2719 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -1170,14 +1170,15 @@ private function registerTranslatorConfiguration(array $config, ContainerBuilder ->followLinks() ->files() ->filter(function (\SplFileInfo $file) { - return 2 === substr_count($file->getBasename(), '.') && preg_match('/\.\w+$/', $file->getBasename()); + return 2 <= substr_count($file->getBasename(), '.') && preg_match('/\.\w+$/', $file->getBasename()); }) ->in($dirs) ->sortByName() ; foreach ($finder as $file) { - list(, $locale) = explode('.', $file->getBasename(), 3); + $fileNameParts = explode('.', basename($file)); + $locale = $fileNameParts[\count($fileNameParts) - 2]; if (!isset($files[$locale])) { $files[$locale] = []; } diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/translations/domain.with.dots.en.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/translations/domain.with.dots.en.yml new file mode 100644 index 000000000000..5c81ae664d60 --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/translations/domain.with.dots.en.yml @@ -0,0 +1,3 @@ +domain: + with: + dots: It works! diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php index 25b735352390..59e45d2ae7e1 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php @@ -817,6 +817,11 @@ public function testTranslator() $files, '->registerTranslatorConfiguration() finds translation resources in default path' ); + $this->assertContains( + strtr(__DIR__.'/Fixtures/translations/domain.with.dots.en.yml', '/', \DIRECTORY_SEPARATOR), + $files, + '->registerTranslatorConfiguration() finds translation resources with dots in domain' + ); $calls = $container->getDefinition('translator.default')->getMethodCalls(); $this->assertEquals(['fr'], $calls[1][1][0]); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Resources/translations/domain.with.dots.en.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Resources/translations/domain.with.dots.en.yml new file mode 100644 index 000000000000..28d7fb750dbb --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Resources/translations/domain.with.dots.en.yml @@ -0,0 +1 @@ +message: It works! diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Translation/TranslatorTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Translation/TranslatorTest.php index 43d858e452e5..61f600a03f26 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Translation/TranslatorTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Translation/TranslatorTest.php @@ -373,6 +373,21 @@ public function testWarmup() $this->assertEquals('répertoire', $translator->trans('folder')); } + public function testLoadingTranslationFilesWithDotsInMessageDomain() + { + $loader = new \Symfony\Component\Translation\Loader\YamlFileLoader(); + $resourceFiles = [ + 'en' => [ + __DIR__.'/../Fixtures/Resources/translations/domain.with.dots.en.yml', + ], + ]; + + $translator = $this->getTranslator($loader, ['cache_dir' => $this->tmpDir, 'resource_files' => $resourceFiles], 'yml'); + $translator->setLocale('en'); + $translator->setFallbackLocales(['fr']); + $this->assertEquals('It works!', $translator->trans('message', [], 'domain.with.dots')); + } + private function createTranslator($loader, $options, $translatorClass = '\Symfony\Bundle\FrameworkBundle\Translation\Translator', $loaderFomat = 'loader', $defaultLocale = 'en') { if (null === $defaultLocale) { diff --git a/src/Symfony/Bundle/FrameworkBundle/Translation/Translator.php b/src/Symfony/Bundle/FrameworkBundle/Translation/Translator.php index a32e32f89833..1b2dc7e3fa60 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Translation/Translator.php +++ b/src/Symfony/Bundle/FrameworkBundle/Translation/Translator.php @@ -165,7 +165,10 @@ private function addResourceFiles() foreach ($filesByLocale as $locale => $files) { foreach ($files as $key => $file) { // filename is domain.locale.format - list($domain, $locale, $format) = explode('.', basename($file), 3); + $fileNameParts = explode('.', basename($file)); + $format = array_pop($fileNameParts); + $locale = array_pop($fileNameParts); + $domain = implode('.', $fileNameParts); $this->addResource($format, $file, $locale, $domain); } } 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