| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 | 
							- <?php
 
- /*
 
-  * This file is part of the Symfony package.
 
-  *
 
-  * (c) Fabien Potencier <fabien@symfony.com>
 
-  *
 
-  * For the full copyright and license information, please view the LICENSE
 
-  * file that was distributed with this source code.
 
-  */
 
- namespace Symfony\Component\Translation;
 
- use Symfony\Component\Translation\Catalogue\AbstractOperation;
 
- use Symfony\Component\Translation\Catalogue\TargetOperation;
 
- final class TranslatorBag implements TranslatorBagInterface
 
- {
 
-     /** @var MessageCatalogue[] */
 
-     private $catalogues = [];
 
-     public function addCatalogue(MessageCatalogue $catalogue): void
 
-     {
 
-         if (null !== $existingCatalogue = $this->getCatalogue($catalogue->getLocale())) {
 
-             $catalogue->addCatalogue($existingCatalogue);
 
-         }
 
-         $this->catalogues[$catalogue->getLocale()] = $catalogue;
 
-     }
 
-     public function addBag(TranslatorBagInterface $bag): void
 
-     {
 
-         foreach ($bag->getCatalogues() as $catalogue) {
 
-             $this->addCatalogue($catalogue);
 
-         }
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function getCatalogue(string $locale = null): MessageCatalogueInterface
 
-     {
 
-         if (null === $locale || !isset($this->catalogues[$locale])) {
 
-             $this->catalogues[$locale] = new MessageCatalogue($locale);
 
-         }
 
-         return $this->catalogues[$locale];
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function getCatalogues(): array
 
-     {
 
-         return array_values($this->catalogues);
 
-     }
 
-     public function diff(TranslatorBagInterface $diffBag): self
 
-     {
 
-         $diff = new self();
 
-         foreach ($this->catalogues as $locale => $catalogue) {
 
-             if (null === $diffCatalogue = $diffBag->getCatalogue($locale)) {
 
-                 $diff->addCatalogue($catalogue);
 
-                 continue;
 
-             }
 
-             $operation = new TargetOperation($diffCatalogue, $catalogue);
 
-             $operation->moveMessagesToIntlDomainsIfPossible(AbstractOperation::NEW_BATCH);
 
-             $newCatalogue = new MessageCatalogue($locale);
 
-             foreach ($catalogue->getDomains() as $domain) {
 
-                 $newCatalogue->add($operation->getNewMessages($domain), $domain);
 
-             }
 
-             $diff->addCatalogue($newCatalogue);
 
-         }
 
-         return $diff;
 
-     }
 
-     public function intersect(TranslatorBagInterface $intersectBag): self
 
-     {
 
-         $diff = new self();
 
-         foreach ($this->catalogues as $locale => $catalogue) {
 
-             if (null === $intersectCatalogue = $intersectBag->getCatalogue($locale)) {
 
-                 continue;
 
-             }
 
-             $operation = new TargetOperation($catalogue, $intersectCatalogue);
 
-             $operation->moveMessagesToIntlDomainsIfPossible(AbstractOperation::OBSOLETE_BATCH);
 
-             $obsoleteCatalogue = new MessageCatalogue($locale);
 
-             foreach ($operation->getDomains() as $domain) {
 
-                 $obsoleteCatalogue->add(
 
-                     array_diff($operation->getMessages($domain), $operation->getNewMessages($domain)),
 
-                     $domain
 
-                 );
 
-             }
 
-             $diff->addCatalogue($obsoleteCatalogue);
 
-         }
 
-         return $diff;
 
-     }
 
- }
 
 
  |