| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313 | 
							- <?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\Config\Resource\ResourceInterface;
 
- use Symfony\Component\Translation\Exception\LogicException;
 
- /**
 
-  * @author Fabien Potencier <fabien@symfony.com>
 
-  */
 
- class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterface
 
- {
 
-     private $messages = [];
 
-     private $metadata = [];
 
-     private $resources = [];
 
-     private $locale;
 
-     private $fallbackCatalogue;
 
-     private $parent;
 
-     /**
 
-      * @param array $messages An array of messages classified by domain
 
-      */
 
-     public function __construct(?string $locale, array $messages = [])
 
-     {
 
-         if (null === $locale) {
 
-             @trigger_error(sprintf('Passing "null" to the first argument of the "%s" method has been deprecated since Symfony 4.4 and will throw an error in 5.0.', __METHOD__), \E_USER_DEPRECATED);
 
-         }
 
-         $this->locale = $locale;
 
-         $this->messages = $messages;
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function getLocale()
 
-     {
 
-         return $this->locale;
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function getDomains()
 
-     {
 
-         $domains = [];
 
-         foreach ($this->messages as $domain => $messages) {
 
-             if (str_ends_with($domain, self::INTL_DOMAIN_SUFFIX)) {
 
-                 $domain = substr($domain, 0, -\strlen(self::INTL_DOMAIN_SUFFIX));
 
-             }
 
-             $domains[$domain] = $domain;
 
-         }
 
-         return array_values($domains);
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function all($domain = null)
 
-     {
 
-         if (null !== $domain) {
 
-             // skip messages merge if intl-icu requested explicitly
 
-             if (str_ends_with($domain, self::INTL_DOMAIN_SUFFIX)) {
 
-                 return $this->messages[$domain] ?? [];
 
-             }
 
-             return ($this->messages[$domain.self::INTL_DOMAIN_SUFFIX] ?? []) + ($this->messages[$domain] ?? []);
 
-         }
 
-         $allMessages = [];
 
-         foreach ($this->messages as $domain => $messages) {
 
-             if (str_ends_with($domain, self::INTL_DOMAIN_SUFFIX)) {
 
-                 $domain = substr($domain, 0, -\strlen(self::INTL_DOMAIN_SUFFIX));
 
-                 $allMessages[$domain] = $messages + ($allMessages[$domain] ?? []);
 
-             } else {
 
-                 $allMessages[$domain] = ($allMessages[$domain] ?? []) + $messages;
 
-             }
 
-         }
 
-         return $allMessages;
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function set($id, $translation, $domain = 'messages')
 
-     {
 
-         $this->add([$id => $translation], $domain);
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function has($id, $domain = 'messages')
 
-     {
 
-         if (isset($this->messages[$domain][$id]) || isset($this->messages[$domain.self::INTL_DOMAIN_SUFFIX][$id])) {
 
-             return true;
 
-         }
 
-         if (null !== $this->fallbackCatalogue) {
 
-             return $this->fallbackCatalogue->has($id, $domain);
 
-         }
 
-         return false;
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function defines($id, $domain = 'messages')
 
-     {
 
-         return isset($this->messages[$domain][$id]) || isset($this->messages[$domain.self::INTL_DOMAIN_SUFFIX][$id]);
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function get($id, $domain = 'messages')
 
-     {
 
-         if (isset($this->messages[$domain.self::INTL_DOMAIN_SUFFIX][$id])) {
 
-             return $this->messages[$domain.self::INTL_DOMAIN_SUFFIX][$id];
 
-         }
 
-         if (isset($this->messages[$domain][$id])) {
 
-             return $this->messages[$domain][$id];
 
-         }
 
-         if (null !== $this->fallbackCatalogue) {
 
-             return $this->fallbackCatalogue->get($id, $domain);
 
-         }
 
-         return $id;
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function replace($messages, $domain = 'messages')
 
-     {
 
-         unset($this->messages[$domain], $this->messages[$domain.self::INTL_DOMAIN_SUFFIX]);
 
-         $this->add($messages, $domain);
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function add($messages, $domain = 'messages')
 
-     {
 
-         $altDomain = str_ends_with($domain, self::INTL_DOMAIN_SUFFIX) ? substr($domain, 0, -\strlen(self::INTL_DOMAIN_SUFFIX)) : $domain.self::INTL_DOMAIN_SUFFIX;
 
-         foreach ($messages as $id => $message) {
 
-             unset($this->messages[$altDomain][$id]);
 
-             $this->messages[$domain][$id] = $message;
 
-         }
 
-         if ([] === ($this->messages[$altDomain] ?? null)) {
 
-             unset($this->messages[$altDomain]);
 
-         }
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function addCatalogue(MessageCatalogueInterface $catalogue)
 
-     {
 
-         if ($catalogue->getLocale() !== $this->locale) {
 
-             throw new LogicException(sprintf('Cannot add a catalogue for locale "%s" as the current locale for this catalogue is "%s".', $catalogue->getLocale(), $this->locale));
 
-         }
 
-         foreach ($catalogue->all() as $domain => $messages) {
 
-             if ($intlMessages = $catalogue->all($domain.self::INTL_DOMAIN_SUFFIX)) {
 
-                 $this->add($intlMessages, $domain.self::INTL_DOMAIN_SUFFIX);
 
-                 $messages = array_diff_key($messages, $intlMessages);
 
-             }
 
-             $this->add($messages, $domain);
 
-         }
 
-         foreach ($catalogue->getResources() as $resource) {
 
-             $this->addResource($resource);
 
-         }
 
-         if ($catalogue instanceof MetadataAwareInterface) {
 
-             $metadata = $catalogue->getMetadata('', '');
 
-             $this->addMetadata($metadata);
 
-         }
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function addFallbackCatalogue(MessageCatalogueInterface $catalogue)
 
-     {
 
-         // detect circular references
 
-         $c = $catalogue;
 
-         while ($c = $c->getFallbackCatalogue()) {
 
-             if ($c->getLocale() === $this->getLocale()) {
 
-                 throw new LogicException(sprintf('Circular reference detected when adding a fallback catalogue for locale "%s".', $catalogue->getLocale()));
 
-             }
 
-         }
 
-         $c = $this;
 
-         do {
 
-             if ($c->getLocale() === $catalogue->getLocale()) {
 
-                 throw new LogicException(sprintf('Circular reference detected when adding a fallback catalogue for locale "%s".', $catalogue->getLocale()));
 
-             }
 
-             foreach ($catalogue->getResources() as $resource) {
 
-                 $c->addResource($resource);
 
-             }
 
-         } while ($c = $c->parent);
 
-         $catalogue->parent = $this;
 
-         $this->fallbackCatalogue = $catalogue;
 
-         foreach ($catalogue->getResources() as $resource) {
 
-             $this->addResource($resource);
 
-         }
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function getFallbackCatalogue()
 
-     {
 
-         return $this->fallbackCatalogue;
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function getResources()
 
-     {
 
-         return array_values($this->resources);
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function addResource(ResourceInterface $resource)
 
-     {
 
-         $this->resources[$resource->__toString()] = $resource;
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function getMetadata($key = '', $domain = 'messages')
 
-     {
 
-         if ('' == $domain) {
 
-             return $this->metadata;
 
-         }
 
-         if (isset($this->metadata[$domain])) {
 
-             if ('' == $key) {
 
-                 return $this->metadata[$domain];
 
-             }
 
-             if (isset($this->metadata[$domain][$key])) {
 
-                 return $this->metadata[$domain][$key];
 
-             }
 
-         }
 
-         return null;
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function setMetadata($key, $value, $domain = 'messages')
 
-     {
 
-         $this->metadata[$domain][$key] = $value;
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function deleteMetadata($key = '', $domain = 'messages')
 
-     {
 
-         if ('' == $domain) {
 
-             $this->metadata = [];
 
-         } elseif ('' == $key) {
 
-             unset($this->metadata[$domain]);
 
-         } else {
 
-             unset($this->metadata[$domain][$key]);
 
-         }
 
-     }
 
-     /**
 
-      * Adds current values with the new values.
 
-      *
 
-      * @param array $values Values to add
 
-      */
 
-     private function addMetadata(array $values)
 
-     {
 
-         foreach ($values as $domain => $keys) {
 
-             foreach ($keys as $key => $value) {
 
-                 $this->setMetadata($key, $value, $domain);
 
-             }
 
-         }
 
-     }
 
- }
 
 
  |