You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
<?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) { 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 ($operation->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($operation->getObsoleteMessages($domain), $domain); }
$diff->addCatalogue($obsoleteCatalogue); }
return $diff; } }
|