From 98f2b085839e1fd10b980cf94da18a5b10e712c9 Mon Sep 17 00:00:00 2001 From: Adam Prager Date: Sun, 6 Oct 2013 19:09:56 +0200 Subject: [PATCH 1/2] Translation loader - ignore locale --- .../FrameworkBundle/Command/TranslationUpdateCommand.php | 2 +- .../FrameworkBundle/Translation/TranslationLoader.php | 2 +- src/Symfony/Component/Translation/MessageCatalogue.php | 6 +++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Command/TranslationUpdateCommand.php b/src/Symfony/Bundle/FrameworkBundle/Command/TranslationUpdateCommand.php index 3bf1d857f34d6..0dcb1e608b1ad 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Command/TranslationUpdateCommand.php +++ b/src/Symfony/Bundle/FrameworkBundle/Command/TranslationUpdateCommand.php @@ -100,7 +100,7 @@ protected function execute(InputInterface $input, OutputInterface $output) $output->writeln(sprintf('Generating "%s" translation files for "%s"', $input->getArgument('locale'), $foundBundle->getName())); // load any messages from templates - $extractedCatalogue = new MessageCatalogue($input->getArgument('locale')); + $extractedCatalogue = new MessageCatalogue(null); $output->writeln('Parsing templates'); $extractor = $this->getContainer()->get('translation.extractor'); $extractor->setPrefix($input->getOption('prefix')); diff --git a/src/Symfony/Bundle/FrameworkBundle/Translation/TranslationLoader.php b/src/Symfony/Bundle/FrameworkBundle/Translation/TranslationLoader.php index aea1ec4e22a46..32e27ec17a394 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Translation/TranslationLoader.php +++ b/src/Symfony/Bundle/FrameworkBundle/Translation/TranslationLoader.php @@ -50,7 +50,7 @@ public function loadMessages($directory, MessageCatalogue $catalogue) foreach ($this->loaders as $format => $loader) { // load any existing translation files $finder = new Finder(); - $extension = $catalogue->getLocale().'.'.$format; + $extension = $catalogue->getLocale() === null ? $format : $catalogue->getLocale().'.'.$format; $files = $finder->files()->name('*.'.$extension)->in($directory); foreach ($files as $file) { $domain = substr($file->getFileName(), 0, -1 * strlen($extension) - 1); diff --git a/src/Symfony/Component/Translation/MessageCatalogue.php b/src/Symfony/Component/Translation/MessageCatalogue.php index 1d8a08d88578f..a627957ce6557 100644 --- a/src/Symfony/Component/Translation/MessageCatalogue.php +++ b/src/Symfony/Component/Translation/MessageCatalogue.php @@ -150,6 +150,10 @@ public function replace($messages, $domain = 'messages') */ public function add($messages, $domain = 'messages') { + if ($this->locale === null) { + $messages = array_fill_keys(array_keys($messages), null); + } + if (!isset($this->messages[$domain])) { $this->messages[$domain] = $messages; } else { @@ -164,7 +168,7 @@ public function add($messages, $domain = 'messages') */ public function addCatalogue(MessageCatalogueInterface $catalogue) { - if ($catalogue->getLocale() !== $this->locale) { + if ($this->locale !== null && $catalogue->getLocale() !== $this->locale) { throw new \LogicException(sprintf('Cannot add a catalogue for locale "%s" as the current locale for this catalogue is "%s"', $catalogue->getLocale(), $this->locale)); } From 938e0a6d6353d4440615789fe43a633a0488817d Mon Sep 17 00:00:00 2001 From: Adam Prager Date: Sun, 6 Oct 2013 19:34:58 +0200 Subject: [PATCH 2/2] TranslationUpdateCommand fallback catalogue --- .../FrameworkBundle/Command/TranslationUpdateCommand.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Command/TranslationUpdateCommand.php b/src/Symfony/Bundle/FrameworkBundle/Command/TranslationUpdateCommand.php index 0dcb1e608b1ad..8c2881e636e75 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Command/TranslationUpdateCommand.php +++ b/src/Symfony/Bundle/FrameworkBundle/Command/TranslationUpdateCommand.php @@ -107,10 +107,15 @@ protected function execute(InputInterface $input, OutputInterface $output) $extractor->extract($foundBundle->getPath().'/Resources/views/', $extractedCatalogue); // load any existing messages from the translation files - $currentCatalogue = new MessageCatalogue($input->getArgument('locale')); $output->writeln('Loading translation files'); $loader = $this->getContainer()->get('translation.loader'); + + $fallbackCatalogue = new MessageCatalogue(null); + $loader->loadMessages($bundleTransPath, $fallbackCatalogue); + + $currentCatalogue = new MessageCatalogue($input->getArgument('locale')); $loader->loadMessages($bundleTransPath, $currentCatalogue); + $currentCatalogue->addFallbackCatalogue($fallbackCatalogue); // process catalogues $operation = $input->getOption('clean')