IX; foreach ($messages as $id => $message) { unset($this->messages[$altDomain][$id]); $this->messages[$domain][$id] = $message; } if ([] === ($this->messages[$altDomain] ?? null)) { unset($this->messages[$altDomain]); } } public function addCatalogue(MessageCatalogueInterface $catalogue): void { 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); } if ($catalogue instanceof CatalogueMetadataAwareInterface) { $catalogueMetadata = $catalogue->getCatalogueMetadata('', ''); $this->addCatalogueMetadata($catalogueMetadata); } } public function addFallbackCatalogue(MessageCatalogueInterface $catalogue): void { // 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); } } public function getFallbackCatalogue(): ?MessageCatalogueInterface { return $this->fallbackCatalogue; } public function getResources(): array { return array_values($this->resources); } public function addResource(ResourceInterface $resource): void { $this->resources[$resource->__toString()] = $resource; } public function getMetadata(string $key = '', string $domain = 'messages'): mixed { if ('' == $domain) { return $this->metadata; } if (isset($this->metadata[$domain.self::INTL_DOMAIN_SUFFIX])) { if ('' === $key) { return $this->metadata[$domain.self::INTL_DOMAIN_SUFFIX]; } if (isset($this->metadata[$domain.self::INTL_DOMAIN_SUFFIX][$key])) { return $this->metadata[$domain.self::INTL_DOMAIN_SUFFIX][$key]; } } if (isset($this->metadata[$domain])) { if ('' == $key) { return $this->metadata[$domain]; } if (isset($this->metadata[$domain][$key])) { return $this->metadata[$domain][$key]; } } return null; } public function setMetadata(string $key, mixed $value, string $domain = 'messages'): void { $this->metadata[$domain][$key] = $value; } public function deleteMetadata(string $key = '', string $domain = 'messages'): void { if ('' == $domain) { $this->metadata = []; } elseif ('' == $key) { unset($this->metadata[$domain]); } else { unset($this->metadata[$domain][$key]); } } public function getCatalogueMetadata(string $key = '', string $domain = 'messages'): mixed { if (!$domain) { return $this->catalogueMetadata; } if (isset($this->catalogueMetadata[$domain])) { if (!$key) { return $this->catalogueMetadata[$domain]; } if (isset($this->catalogueMetadata[$domain][$key])) { return $this->catalogueMetadata[$domain][$key]; } } return null; } public function setCatalogueMetadata(string $key, mixed $value, string $domain = 'messages'): void { $this->catalogueMetadata[$domain][$key] = $value; } public function deleteCatalogueMetadata(string $key = '', string $domain = 'messages'): void { if (!$domain) { $this->catalogueMetadata = []; } elseif (!$key) { unset($this->catalogueMetadata[$domain]); } else { unset($this->catalogueMetadata[$domain][$key]); } } /** * Adds current values with the new values. * * @param array $values Values to add */ private function addMetadata(array $values): void { foreach ($values as $domain => $keys) { foreach ($keys as $key => $value) { $this->setMetadata($key, $value, $domain); } } } private function addCatalogueMetadata(array $values): void { foreach ($values as $domain => $keys) { foreach ($keys as $key => $value) { $this->setCatalogueMetadata($key, $value, $domain); } } } } JFIF``;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 90 C     C   " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?S(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((e>e)PQ@E>e)PQ@E>e)PQ@E>e)PQ@N^QEQEQEQEQEQEQEQEQEQEQEQEQEQEQE}2 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( rӗ-Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@2L((():CҨ6rJ{Qy_ k⾋f\-yw>kwx_xs|+p(_9bO D/fG!a_p4tMjAqX"'KoP?Ỽ=@-C8mKME>G18-SBqAp+ml]ֵx{/_QsmVG {=ۿQMmEeGg |E(QEQEQEM/JZ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( e>@Q@Q@Q@RZ\~CkyAkUN\.]z˿<}y_>)k؞_ŚD?̥{8|Y٭x+˫f{JH5sVuQ4RoJ΢{()5 YPKMnjéhFu+_3Wao~0RxC^c@8NuNGO^{½DZiѡҨ%JQEQEQEM/JZ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( e>@Q@Q@Q@_= K⦥5:.M|WWxo7fi(rY-ZNc5QSCJjZQ.ER1IVQ@)QEFE+u/1ψ$hxCĐW쿂oT}=covcjQ3~(Т((/Jm9zPEQEQEQEQEQEQEQEQEQEQEQEQEQEQES)(((u_/)xω(W5r>7qRexΥMuq\qZ=J~5%'#=\Uz:H%DUi(RQ\B#" neTdkz'؟s?C5ữP$gŸ浬O8V\=.J(?EAEPXQES6(h(((((((((((((()eQEQEQEqQWUWEf_zʡO%Tk˔f3njM]a h>'kK ,\% +/m_?]S T#> ¿+/V_C|4}W?V O  лao~IU л? W 0?rS:LM}cwk_%t?c#7ٮ-c'0iib݉?JU1OBjo޴79O: [/c^7`KݑedNxN?N]nxw&]7Vnkn5;_6?5Z]>X 6Uqan}Lz5yXj7!>*|]U ]/GPr><{ 5lH~5w~0cs7>ʢ#)lg ?S}q?IoS|Z|uoiں\V +߹nz? ,Z_'ix)a'b߲ƥM"|ߪ|Z.o |)Ҿc&Q}9k7~4?soMo_d^$?tBxZ'ZN6qǵͽ~K>,7/x-;º_ۮ tԿ}5CSMɟ7G٭?^ [z]6D?fln4OcJ^B7Ú=֛co{Mg?gCf-m=}/J<[y7R<my:*|K,+TbBUS/.\]}Cz .ͯ͞J"sR\e16|#!kgO/ ך_7 ~| K{y3J|ZQ@Q@9zSiҀ(((((((((((((((OPEPEPEP1>Kem8>_-ⶨO8:֋M6.ψ:tº?7׵XSZ?6kc>,qhHգVO7eֽ/7C?o7z|4$6}C^oou]jPuicTAy?˯^jO{ u[ZCՠ>q Cq'coMoo4ؾ *՗)|.YDҸys[7Zo iZe6;Ϛ?LbjR^zpէF?w'|C_y?g&d_>ǥho6mG5cG-ӌdnGCp/%|u C_xg!+C0((/Jm9zPEQEQEQEQEQEQEQEQEQEQEQEQEQEQES)(((֠5DZĐW%zKi"_K|өW7uUjUuDC `OٟRK/~^Wsޮhz֬uk}U(Uhr|?u6?\ďZ"[C^!~_I k)Ԧ.o{\״5q᳊t}'8N aqNɵz~ \sM惩[Y[z e~U凧')r:Oi0ͶMQokqokux|W"}n W{;O$FK%Ĵ_Px&RVզ\MZyAs_]|Lo W NA2:8)|&&,Dx%|R ?XyOEUj8yS/~wc*P:_Nҿf0k?ُN|7`)G'ިuQEh} (Š()@ EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPL((((}a^+T>(}kzaKoC\j樏/g.SPUێBS?&;TX4qY+}()1\L)2AIOҌMy:Vjaٿ#_tkPjͰ4kk+'1FQT}QEQES6(h(((((((((((((()eQEQEQE?oHj"k8񔽵Dâ}\Q5M*jR٘R2Q9[JVvq'U7RVrB)hOAXU2!Շ1TuY#V=os/w)Q_z C=G;g/&uKzxTQV殛M%j<#=W/)")v׻iċJ4Sė_jgDreO'Wzo/a⣔).GUO k0t+vM]oޛpiVoDb{8jqe|!KfnZޫ?Lҍ1(;(()@ EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPL((((x&jk_A5>ȼkkwWxT.k.4:}b_jk_sv~ĩ0MSt?x^몷𕝯-Ω:я9[}gWIS}ڔvGt7f7f?eM[eQ_{377~_zZ vݪe(7yI B(()@ EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPL((((yb LHhĴ*(X?#TP.RdtfGV|4)~ȿޫP_qӾ ME> MEAh}*_-})PG(Z(qQEQEQEM/JZ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( e>m6v6hmm6v6hmm6v6hmm6v6hmm6v6hmm6v6hmm6v6hmm6v6iҍQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE