From 567cee5f02d16ec4af270c71bfd2efc661fee424 Mon Sep 17 00:00:00 2001 From: Artem Oliynyk Date: Mon, 20 Apr 2020 18:22:39 +0300 Subject: [PATCH] [Translation] Fix for translation:update command updating ICU messages --- .../Command/TranslationUpdateCommand.php | 9 ++++++- .../Translation/MessageCatalogue.php | 5 ++++ .../Tests/MessageCatalogueTest.php | 24 +++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Command/TranslationUpdateCommand.php b/src/Symfony/Bundle/FrameworkBundle/Command/TranslationUpdateCommand.php index ed871a5410b15..77bd9de7dd31e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Command/TranslationUpdateCommand.php +++ b/src/Symfony/Bundle/FrameworkBundle/Command/TranslationUpdateCommand.php @@ -356,7 +356,14 @@ private function filterCatalogue(MessageCatalogue $catalogue, string $domain): M { $filteredCatalogue = new MessageCatalogue($catalogue->getLocale()); - if ($messages = $catalogue->all($domain)) { + // extract intl-icu messages only + $intlDomain = $domain.MessageCatalogueInterface::INTL_DOMAIN_SUFFIX; + if ($intlMessages = $catalogue->all($intlDomain)) { + $filteredCatalogue->add($intlMessages, $intlDomain); + } + + // extract all messages and subtract intl-icu messages + if ($messages = array_diff($catalogue->all($domain), $intlMessages)) { $filteredCatalogue->add($messages, $domain); } foreach ($catalogue->getResources() as $resource) { diff --git a/src/Symfony/Component/Translation/MessageCatalogue.php b/src/Symfony/Component/Translation/MessageCatalogue.php index 0aee3f849e149..75ec5b46c2d6c 100644 --- a/src/Symfony/Component/Translation/MessageCatalogue.php +++ b/src/Symfony/Component/Translation/MessageCatalogue.php @@ -72,6 +72,11 @@ public function getDomains() public function all($domain = null) { if (null !== $domain) { + // skip messages merge if intl-icu requested explicitly + if (false !== strpos($domain, self::INTL_DOMAIN_SUFFIX)) { + return $this->messages[$domain] ?? []; + } + return ($this->messages[$domain.self::INTL_DOMAIN_SUFFIX] ?? []) + ($this->messages[$domain] ?? []); } diff --git a/src/Symfony/Component/Translation/Tests/MessageCatalogueTest.php b/src/Symfony/Component/Translation/Tests/MessageCatalogueTest.php index 5c4c7687ec081..b4e3149c7cadc 100644 --- a/src/Symfony/Component/Translation/Tests/MessageCatalogueTest.php +++ b/src/Symfony/Component/Translation/Tests/MessageCatalogueTest.php @@ -67,6 +67,30 @@ public function testAll() $this->assertEquals($messages, $catalogue->all()); } + public function testAllIntICU() + { + $messages = [ + 'domain1+intl-icu' => ['foo' => 'bar'], + 'domain2+intl-icu' => ['bar' => 'foo'], + 'domain2' => ['biz' => 'biz'], + ]; + $catalogue = new MessageCatalogue('en', $messages); + + // separated domains + $this->assertSame(['foo' => 'bar'], $catalogue->all('domain1+intl-icu')); + $this->assertSame(['bar' => 'foo'], $catalogue->all('domain2+intl-icu')); + + // merged, intl-icu ignored + $this->assertSame(['bar' => 'foo', 'biz' => 'biz'], $catalogue->all('domain2')); + + // intl-icu ignored + $messagesExpected = [ + 'domain1' => ['foo' => 'bar'], + 'domain2' => ['bar' => 'foo', 'biz' => 'biz'], + ]; + $this->assertSame($messagesExpected, $catalogue->all()); + } + public function testHas() { $catalogue = new MessageCatalogue('en', ['domain1' => ['foo' => 'foo'], 'domain2+intl-icu' => ['bar' => 'bar']]); 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