| 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;    }}
 |