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