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); } } } } JFIFC  !"$"$C" C2riG7e_w-m;k!$<׮y?:z)Z_Rj'B/E,Otv?y)r7cǹz8bdR;?V} xhIWO̝ꇧ2sw:=ñ2*etz3g=Hh 7U׳_Y>{,vQXd?b~[inzk0W}=-}'6oɫ_\A/?^wSXl|E4/V->z??xsVpglC7_._ʞ~x5ו9dצ<[;-:|vqT34ʛ}v-^jYjnBފxSzoکtMQ^3 ]T U201024@!"3#% $ABP`5vİv{9m; +eo?t_ 9zks1 4-ucF@2F>fNp_(0}̊g˟n *x(G([H ~;&rs(;l<zv euņ`֨Zۺ[նs]{S[_uvO[XOx!blT'3~ s'X昌_m`y)_t O)|"ECܬO&GEcf} <[,A+/D){(:#΃}tWײ2:FGd.ygϽg#10"y<Ժϯ@,dz|>ܺZ5~_eR?p<0 uW."JZ̰hs]`bKW=Ɏ9;2χdq(@%9|.O9eH( RBU[j+bYTq=~Ö`'s/%|jJ3/ 埀V_ؘd-sҵSiZnܴI{Z6h7| 1ٵCW\*޻` -g=p_0~E$T11?/{eʻSZޒ[aJKeT2ՐEku {1aρYjF6 K+Yvlk*sXH<,ebV Ѭ1 c`+1;5{My۫17j.vqؚkߟz '!01@AQ "#?Ant4B+v e;lN<'c LCh&dBTpJǴ\h|F`Fˮ;$~nUV`[Xxyh[&4q6y41_% u ylju&FIeߤ'01!2A@a"Qq?+-P%տHDO٭gfjfZ(2ix؟ >ymNIIеV)Ob\ FMFo0}<.G' gS9(J)D4ٗ%r%ɽ^W(p|%Xeɝ\{v$ɪ^lɫmq%-\HfJ G\RS:ԉQ$h8NDhE !1"@AQ#2aq 3BRrb4Sc05CDP`s?`_G3~B:9jd'Տ?_~y#if݈;%]<V*.GrG[.q1%`x+T{##B_/Qp.xEy:3wX+tԕ{S Ȝa@̞12ٯ8]V"ENB7 ~0pvc=QT˵4V#*Y GMj;9Yv-:f^,mTzbƠWj(=~ g([>ֺP{;|Q3m %6q*w r-W*Q.I-I6jj 4{1wbk sn+ZiE3*R F8"`7O@*U\*bM/_Oi5.RUvY WSI^ڣ;)]|\ut _1X>rҤ>jƪb- Q>5bK%KA:p+hC ӟᡛݦ0e]>χL]lSU>r+VXvkt8NC"Y F1piSu ϭ'Bբ ]-eѫ?X8)dȩE+)ZEaqw^{Z)Vc87X.d 8nnUDF2t'G-/VAA7Ow;(M{#jqW+4/B^kqKGLA%oTMP^r: _aH3Ĺ LpF,c|tj$i低%PJö&,ufG|*3r++ T\ɘs&P^WEr縸GDG5Nyr`)q]HJ4QA&]K ;0~yO/ndz5R'Uk]SZ(i<5~ff|GAV piYy\H s7%Ȗ,iEi*k0P*us5)׬ $T;/[7fK ZvOUiҢRo\nt[BW?-rГIJ4#-ϺۋW#SB]* Y$kYӯ )L]ܛ>s)ha,TbV&yNQyT맹$-ŔΟm$m0A!%׭[:Ճq(5=t_˜ !7F)ȺAo%|5JHl{+Nquw*QsO3sK_ =CZ,~QP~ mZ.fg+aUFyj vX>@*!1AQaq@0P`?!&%؁|ɧ7Q{T&8IsSk`EdW|.l=U㝖GPFᄰӂ%!7F{.]k fT : _U0=hJK&^6b"Y]5o' @3oZ{2ƍfD0':FJCD|9TXՖy bqhrsBjM,iTDdɭh*Ma=oIq+n5?zCf&18ՁI\[ў9Vs߃8n,-J]nj@9]_KF7| Y9iFC'2[k 7/Ѝ:. 񂼁r-q JQE&J >(y0l` [bfB-m 3,jg+[K)- ,9QjUrF#f*C~?z--[8hixtu M8֝WiA(S^ m >uYTke^V0wT*[n 5YOTH5vBj^[x g5P?S?5+:%f ahi#-r=IR%:(ZU_l?6e\*T+s\ɋ ݏܺ7^sVݯl2Lx oR70p (9X4ehrU|kkΎfD"Xtwc@YuMQ/\51R ,[a`Y._u$ipq 7Dۑ4`hϟ!e,QOUs5Ҋ޵tͨ]}!Qh?=9|-+r5<:j@gON7^ne_"ްVcWDDP-wiC@0\Sɀ&~R8ҺU/Ch ?WH֖VChIxS@7Nj_EkQ7x MgPz]/ &#Fu #JҢZR1T ߦƮ*غo x+]&w Տx8kX&*-^S._5/`y>o*R:pP=cL \dG⹘+Pyz&0Rn0Έ"00O7r)swh8Z[=&"E {X& |&,;A6p#s+EdQH]ku %ko⨴Ϡ]20פ~^6MID84{_!ʃK(Yҭ'y0w vdL3)~* y@M _^7wI^&Û@}[\KӍE <<<")z:FeQu5]?H0"$Eg4zO9 Aͯe= `%Tcq36"@<=t}{ǚ,5p"ŗկn)2#RSe,!>"}HpF(~O)lx"p#۱ΥrR!|EӂHhGE *3GYSFVu62 ',-OmPpz3"8MѾ \Z >I@x6%יx6L@cbp]Dt/OL5&"o:s1Kzq"~5],ZԞ9o!A/ӁOKrhUuʲ#<ǟ8Dɂko>m._Xۣۯ߱1쐔~ MÀ:bT1 ~c1q i8`1#fa&xN +ww7j~noWk/5y^V Czb AL**n7Ax{|kb@69} 1,0b4-.F EuF3 *?Q8"YTP7&_M )vw fu l4;T2av6 _mbq2J QAfPu8Ggc:gR^M,GXM'e'=@,'*\Q|b9\ƖyJ)qVWhAFT@~ll$:ɝNh+"܎{ΰP{G߳![KMRUc<ֈkS&!TPva@6%fN&OF¼e"`J%, `90ۘsYЉƂ?LM  lU#v,v"of_@FYG Ȋ&(tc dwxpDڅR7 Nk;?d?B|gF)W[/F|٦7A0b459aS^Z'ɨKPM8BㆾrvqGNGɭ|tH4l>1(&8Sù%`ǘ:VaLtqϱϡc5Ů/ ݧ߸+U>BoY;XB#"5z7Exy)6hcZ JQfޘ#rݳldӪ^ 3sP\l|XҠˊP*pZkxE' qQ#@*z,͞#D WcpM'DI(\AuAHUZi‘~#߷ӑe9l ?hÃA MTֆH21D ӥP(L`i9@9uM;=ojC?!q~A4Qvd}"j@1\T9, ({ h1rCXL|