From f76ac860e59f2fff9bb9141459763d8e7b621d2c Mon Sep 17 00:00:00 2001 From: DrMint <29893320+DrMint@users.noreply.github.com> Date: Sat, 2 Mar 2024 17:55:28 +0100 Subject: [PATCH] Wordings now comes from CMS --- bun.lockb | Bin 360927 -> 360895 bytes package.json | 6 +- scripts/download-wording-keys.ts | 19 +++ .../AppLayout/components/Footer.astro | 2 +- .../AppLayout/components/Topbar/Topbar.astro | 2 +- .../Topbar/components/CurrencySelector.astro | 2 +- .../Topbar/components/LanguageSelector.astro | 5 +- .../Topbar/components/ParentPageLink.astro | 6 +- .../Topbar/components/ParentPagesButton.astro | 2 +- .../Topbar/components/ThemeSelector.astro | 8 +- src/components/Credits.astro | 3 +- src/components/LanguageOverride.astro | 3 +- .../RTLink/components/RTInternalLink.astro | 2 +- src/components/TagGroup.astro | 2 +- .../translations.ts => src/i18n/i18n.ts | 160 +++++------------- src/i18n/wordings-keys.ts | 53 ++++++ src/middleware.ts | 96 +++++++++-- .../[locale]/_components/LibraryGrid.astro | 4 +- .../api/hooks/collection-operation.astro | 23 +++ src/pages/[locale]/api/pages/partial.astro | 4 +- src/pages/[locale]/folders/[slug].astro | 16 +- .../folders/_components/FoldersSection.astro | 4 +- src/pages/[locale]/index.astro | 2 +- src/pages/[locale]/settings/index.astro | 8 +- src/shared/payload/payload-sdk.ts | 32 +--- src/utils/cachedPayload.ts | 7 +- src/utils/cookies.ts | 56 ------ src/utils/format.ts | 14 ++ translations/en.json | 61 ------- translations/fr.json | 45 ----- translations/ja.json | 3 - 31 files changed, 273 insertions(+), 377 deletions(-) create mode 100644 scripts/download-wording-keys.ts rename translations/translations.ts => src/i18n/i18n.ts (50%) create mode 100644 src/i18n/wordings-keys.ts create mode 100644 src/pages/[locale]/api/hooks/collection-operation.astro delete mode 100644 src/utils/cookies.ts create mode 100644 src/utils/format.ts delete mode 100644 translations/en.json delete mode 100644 translations/fr.json delete mode 100644 translations/ja.json diff --git a/bun.lockb b/bun.lockb index e7dda1b8e6868ac0877d78a1525ec6a1d20ce95b..b3f56f2fabc831c7a2f4f01fc45de28616080f48 100755 GIT binary patch delta 36355 zcmeIbcYG98|NgzRvwSU^RARS$?Xu@Dgz zQ33)AHbBLWg14yX?X94ws3@q&^S)-zLhwc(zt8jiy?*~NuUxs#=Q`(nPMw)EvopJ& z%rEu){8Ed1IQ5qFOfFW&2?PoS0@+hDCQh7Lcg&QPOV(D1e=HaX6h>TSxr7@Cgt3<{ zIaIyP0Sx6BJ7L^}$r)3ojz}LiZB!r-$ehAIwpbhgGnp?V-N=mbBkD|>7-*X>5GaV9 z7-{2_&PvShTj?{>ho^bj0)gVhp0xUe@##}DGSdT@8JQWw>x>+K6kVlGOq)8o&e-&s zhpqh{tg7vSgB8Mq=@Pl_6PXk&oz=CdZs1 z89rr7o#~^~ruHG1D%c5DdC|UXVM}aFtJSatuxjwSwP&VHn>CIa^eN%TcZ20;V*2S-;rk34Z>mX_M=WoDvAUg01`{PfyF7krn7x&KC;7 zs^752-f#xCl2DGnz>zX6D(_cx7EBYfYhCWgPf5?bKAj%liLLwxNKe;h|GB`QX%z#P zom$b)*VW_Nf$WU&qiOlnDaS~ljvS_5V;eSY2x> z-8OJrQ^OzEkAWW zm=4VTwWeQOEz+r)!)p8K`$W=WN;_R6Gh^yy#S*6u*+N>CIH0c2|CNWlnwe3b)5d3v z%t#**_^Yz3*Y`*2W&CMGw!tcAa{AQt8B+s+vkkmDWo7?JKoQgY5ek@wexKBD6bQtl zmx8Hd_E}gJ$f2U*kBC%-8!&&>CDmc|VIi1Vm7Ur&5GV<^w|ph6&Ki>#2(XuApKKfm zln!JCvhOFL3M_#&Xe({6y^-W+*qcnxqCW;ReY0D^72!(F{R+&+rVZJX;V}GG3%|ly zF#A*X7Hi)FSHd0*mxg=7@mU0xrTC7g!%8r~+U;Q_tYf(-tYK|OMpd|4Tfe};6s#6S zsJMEdL_2@DGhtO=*7S_2I=p>>t)BV-*6ce&{wx*n{8fPfGckJ=tP0G7RnS1VD%=8A zi%Y;Y;P1#N2bDVe>Ed8j;Cop5iB5ilK7{3eJ6r)C+|?hN4`8JqK72yfwDD5|f%(*2 z6Lf30K!77;_ATB0uKgX3$No30v6~31MFU|u=mKjFG_`h3I1YQ#)qX_=!)kGHbmi-e ztvRu~mmiA~OQBW(*-bG%bqB)ecz@Z0#vvjwXai=O2sOiuHh zl!%-tILdh|l3J*Gu^o6zm}oU0<+;`%uyBE<@)giF{%M8!yI;R=-!Nv$rZ1FMY*u*P83Lch!0$nwI~ z%f7;Jc_V?UDNuw|s{c=AA|Dp+ksO@?{cra7IeXyCjvfeS-Q`b+yO;P=yznA_W^Re3 z6{#0~7w4L%8zRe#^mKMcjux5V+_yQk=$lUPfV;WYWk0)4tw^O(pEw&LPH7Ts?p3;o zL%Oswqnv4*_m%k|==6!KO-OWxL=GjSIQK>3%T?Iix?KO**g8!=|GH!QtlgWJU2%8u z$hf2yPI@FKDFsJIlTw2JaU!*nTZJnJ1A&GVAB>z>loX4>{+R7VCJjl798FFMmv;jJ z4h=+4>XYd7k7P7U39mqF=B3*7Mv~S(%I}y>u})HKC=jUcJ7|{Zw2NdkPjO~Na`?Y7 zakGmhuHWD;rByjEOX8nHVn4MC*a&w%{O`ERHJH zNgF1XIyGOUL6@Xh4Am@uWK*-m;J*t*j12II~^l6+ogoFnTBe1DAM5bq(~0RPbhu^PCTC!so6dyJc6lvzN7BPQU&}5eu&lh zTv=t<6*PKuVzb1U$yhBSnSGi&k4JK@N(q0AZ9O+n3|HYisCqe(6KxWiSQ#BsoK=yW z4k^L+i$sofXcaC})Ngi7WYfZ=SPa`gEfZswVI|3P_$`I}5*fBDI9#fy$inOy8p-IC z5`GY^J(}OoUtuXd6QWsSxZ-8LmCqZj{#Ys_f22XX#PCuZ7m($=8adiIB^=`D=eK>* z2T75PE-6kVlG7z6c(8cnSeI5#e57XA6o(nnH6`W&j#JGd8<`Ow5vq?{$8%eVBd%XX z719Yyao*rKH%D^1rG%eBQds`qK7f zEY&Sm{TZH)<+qyY>}-$Z^hgPwC>=T0qm@%LQnP1@GdhyN|Amp9o+-iK%0`a$Y!&Xn zLO~v4A}1K1o3P}av84TPMRKlAaY{yxUY!!|Th4C+4QibjvlOdYB(r&Q=k-WVuaw}g zPg0~pPtXm6oupTI}+L?>S)qi>4SI+D{jB|NpVpPHB+iQ(t4)E16>4<*G`@tu27 zPWwnszm%BCXssg0dp38TjMVI(5bME&AjYjqew-L4Oy7}UaNiQWh}C` zX&!c~`YrP2D0^*AYKpToax^t1c&uuq)^)AI$<_Q}3q&S0PmGz4)grR7Z}aeGLh5(_ zka7~M9hNtoF+Es0xAkV{VnTM9M<#_ZdU*R))f)aN_!DzTBx7Jo_%5`%UiBvpOw@@6 z?MF0L4LZOvXZF_gk3$@(IEvM;X5?h7VO~nj-S@DPz3M0~uD0JX{y}>dR)6B~ zvOg&nL#^$_GcJ7-!w+H&^DPcf`5O3xKpn1147bMW z;KecdV{XApj%;k#Jp4Q%^+K$75G#Uf)y>9jht@?5J{2(b7Lz9T^r{U|dx?{z8O|SPNiXeJkL4f#zb4c8b5<$`nxW^cZCInRyxlY0h*gU>0nCYl)CKD{Kjr&L zv9wHwD1TLP3`_mx7to<)AaLzD>praWaX({?ITtsS&hLB9+Jbf6IqT_^ycH|K5c>Hx z%}k2LIA7&Kt6Ce&?XLoia_yIfHrXma1QgfzhlSjFX@zymz!EZ ze5IGkXUCK;<&>@@g+sUQV`$;vZF$)--Ag$Y8c64G;B6OURgyhF-~jgWK)|fTdsYEL zOdYRnjIg)mWmSsK^0LwE-X@kC`qtaT>YG&G^jPssG_O${d%P_#%kNTHyP~&=rH}Q^f5aM;2|#`(TArl4Qrac~)o6+gHZh}9nhugYT_%_T zw25WU1o=TWP`Vp|^!Y&L-3rt(i-6+q0@}n%w-~emZ-ZEH2uS}BXoI_W4LyvZ27e0V z=rf@0?^x--@KX8gn2lvUj#N|IYwr^D1Fk=^g$16DwT^UDe5F<1fbY zU%!7Z6AXb6~u;Lrp_{Oj*&>YrwF{W{4oziApSsEuFtx2n%X%EZp z2+L<@n7=?5{j)6Jy|9(O53F?kU?u6Vf0h+Ywfc3i(hr8^Kh4_dj@{)5coCyv{sI~N zljE^6ENeyE z_ex|FD`@yv3|W^Ug`2EqxYHlJ7( z?PG1R8Zro$G=zVu_z2k1nK7M!YChWXSXf(LcFfB1>@km(cVfMN-Z5c33Dva8HbY*P zG}Y>2)pVM*^Ro2o(F?-!Y`nM#_F`*ag#9zsMIy-dw;BIm))SP=?~cW4=f*o<^Mx#f8^U)fx|Z9W6Phw+QbSTv9?$a zKC}F}<$v4wye#QIR?o}I|E1N%VI8)=C!m)7Xd}c*_>OqLrs;@P zlUO;gWu1s+*S5A;wWtFteG^zwNtT<-V9U$O-$J@MNhSQVKc?h1Hu=R^@ojCocCb3H zleIg;`~|w{-(Rq**~7+*<*%n}&;A7TK~ccFw6UxN*V%*vU^y5B^A{Lu?P1nVhn0S$ zBLBqFN7?w%HeRgYSl1rL#@Yz6rqcv#i&gL>Yl{_}YHhK0>RGT3*bA-xcdR6L*nCUX z|Egic^4+kycDc3hgSClOu~o37wO0S1uo|+CeBy^}{wxJlfrqUiR)Y1`{ySEZ4g6~Z ze`C{&buvC}?YyjVezm>P2FS{H#sz|A$qO*Ikx1MEU4GtqS7Qjpvy0&nu|xq9hO( zhvldQd>LHLW)v$}%i0%X<*RMe)q~Ze4QzU`;v0%J{~Fl{vG(HTurjo?dR|t>R_Ll= z8_Vr2cZAi0-C%8bS^j#UD}PTLFZQm#t|lOdyizihm_U`Es<^ z3j1L7#Ov1H4=esnSS>wZ_4loQ5Y{G^!$Yv7!~9dePh?n@-_Nj>?sLokRtuEyKbF6O z`3rnw?Qda?>5tYv39BN%SzVFJAB0svjOAEZ=?dHUqLwd%wTV@ctl|Xl6)0^J#KYQ6 zD#F_GvNBY%>8rvju!gm-gjJEcunKN$xtY~lz)GJ2tGsqFe_4S}Hliym2i;*6)WdR5 z%U8qv1^Vz$j`~|Y6_&$6unHb-Im7Ciu+mSo_EZ}`%VWkr+a{O~S0v#&SQp@%U~OVm z=qbyatuB`SG^`42we~j4&%!ErC#;4&4{H-E-!9pj|6ahdcDvVXg4b<^yevm=Sp8zG zp*vvX^Rfzj-|BhUglaoAOu5=lY%#e$WRr*;)2B9f8&L!Q!c@$s{8Ll^t!VfQiGO10 z|FQ93+IX?_udMB{*;(7(&-&WR7h`4nhIl18!9UgVN1Hw`E8S1%;*&OBtn|NFTdXN^ z#_DHd?D~U%*DhDFY+_}Mv36e8sh~8v3MvE3cX?Q+|0`h)c|BP98^GG~vhp>w@s0EO z$G<>hn=mgcVH0$5Q&=6}%-YQ@w}7>Ym9C|=^Rg;Toei*u{Gu)<2x9Re-nv;Pp&a~+!Se|6l=iw}` zz$rw?@l=~YtSLVmmZK~ipKW;_tcuQuwTYGPRvW*-@P z3#-7_VNKbOt^SGSPho9&SuOv<#{UOad0$!XbIfMA7^@;*+jy}u9*3oW3#+9++xWcf zn3(!bg?PpMVWac1V_Medo=dm-+;h3`pEn!zbdol)N_1hB7_uA#x54fJ>wtbOtl8Pm z#`m}O09cz?`3G7aWc7=1Sude76}O0nFMUSijYTi|Lw%{wX0(ZA>$4ecVvYEv&uHib zb$-3KDnG0O)c zEE|Y$MnXN)c@RRUK?oZMAv7?jC7hBlXfQ$}lQS4${a}Q+AqY)O>JWtfLlAaKNHpQ0 z2(d#EGKV50n{5)dN+_R((A;FCA&gE#*e{`_i64egW*EYpVF)Q^pM<><>I_F{V`dIV zm@ypTu!MG|<_LruBM=siK)A{rl5kK$%XEZ}W??$Qf^>xA5;~jYkqAj65mt^w=xUBi z_)0?eQ3&15@=*xOMj@P$(9?7tjnHW{!p6}Ez07F|rz8x@KOdgdt|1 zguN2#j7LZ_Gsh#$7>{sR!f;b_0z!=m2#Y2lq?h0HAf|UC87IdgiN!1GQzUS2xlZrFrB9$bee*&aSFmDb6UbF34^90OfflA z5!O#dh?|Bm&7@94=syi%r-bPyd_6+!^$3~QBg{10By5#XemcTzlQA7(^mK&%66Tor z83<)&Ak3M8kY)Bs*ejvVOoVx6=1hbcGZ79;m~U#%LZ~qdVbLsvo6R8!2PL$ejc}`3 zI2&QXY=q+y7MkQ65Rz^{Sa}1&?dGV2uOxJzgRsafpM$V$4#F7;cbU#}5jxF9*f@&yRX79gCF z@Pz5S5TVmTgpCUkHks2BPDvPa8^UIja~s0?+YsVzM|j4h-j2}!c7&Z0a!vRSgxEU} zGVegxX0}P#Dxv%$gzY9{5yI$22>T`MH1T&Ll(`dO&YcL)n|%`YN~m)e!frG3E`%9( zAsm+QqN%wUp~hl_MT-$$Hisk}l+bbs!XC453BrOU2*)MtGs#O4l9nQ@T#E3TIV#~R z3Ed+I`_1wQ!moA^gi^EJGN*3}L^7!zO+?LYd_VbCx4~V)jYc zE1}MP2uIA!`w(W_hj3WJ=ceWggc>Ul7Og<|!W@!tP(sW55xz7F??+g0Kf-YdM@{ld zgrt=SD_0_XZH`L#N<#Nl2*=IxRS3&gA)Jx$o$0(9q0?%FjjIt(n9~wYNf@*S;YX9R z24Vdggt)Z`Cr#>Fg#K$0c1rlggdaeNeE=cz0ff_Ln}n?r%CAHC&19@Y7`+Z*zl1X; z{y~H?4P~%~QMGqsym_rf{ zN@)2ALVmOG5rhSgARLzvHp%M|lGY=vT#r!D9F_2uggUHha$Dy(H4gBF86lHBHy9f; ziMw0j++HU5xg)W_t2|rJU-o+i%-rnYZ82MT^s9j3OEyNC@7DxFF@ZNyD z{_Ba7H`$BA=-U>$>{(&fj&qB*4Cx^VwjyX+ z{VQek8Fambp(`alAF%{zyUeE3vpP%73Awo6i|}8?kPE$NvCe8GZF0SB@TApBSxpam zZ8dE&ak0Zjm9bHJqJ5{;;;p7fiuPKqtkraX`AxG#F7(=zwsJN~4@RH0mwI{`L=Dk{ zS(mFdY!z%eJy2BD9FdD^HmZ`1;yZ8x)vZ?9YNgO>Tdj)KRCEE;U_34g*{G^EDxRoP zR;y+;y#pJ4^s>6u^dj!|rH`O~geR8>N?QJDRb4c|qV~ z<4nTE2R5pgO|A#=^(KL~YpkX>`}KN)w%%4tAslCV$wgtJG5 zKQDrB0wq{91vyR9}2O#{KV zdz^bddZyJ>^cSYV6kO&>h7aJJP35Kb}kgj7W7WIwwtUrgzy0Kwp6gS5hhJ8hSE(#F?AkQs%hYAv^4lpt6guk zVen&Cn@;$Y*(4YHZM&Z!ik#k8O}vFRn(&iWn??Ar)izmew&IO*JuWs8r7qlTqvjBP z%DR2pYID)Fv#SfAv04`4Vy2f|T*fe{3v+GMJi^;;*KM`hjc7Zpw#{nu(MFoJa-r8} z)rH$_)Xj=gi`aHp?H0nLthUo?x1wEbPRND2ZYt(3qST!W!Iv~dU&HZ&O@13;J=?8D zzG&0kPI!fBGufWADPaDU_m|v&6Wea#uHe=6^F_+J9=LWMv zX4MRLva`w*o9RyB!usZ!Zlh|NoDK*A7ibBkq0RvhgGa#Pfcbc)TRHAN)d6UYw93TI zaw~9wR%e!5y5!?1PXMioHi4%A7g4j^+Ht!Hz5reXFPkM~%Gyux4e%y-3zP(M-@ROP#IhSs^$xr z+OysG^7>5SYJ?b&599~2pa3Xj(q_BG8(v1RI4A+M?(yDtfP+A5o}=Ix&>Jaw75t$X z^YCo9a+4>pp9I-p9?;uDv%w8uF3{UV9e`eg(&v2obhM;7Gutiglrtr7a4Q5Wxu)q2 z?&Vqe>48{K5NL^%ALt7`!=NBIj{Yt94tx(zfFHn*;3W7N`~pq^t(j(nIY38f9g*h& z9YSvbS|p7JIsxc_f4$3t*3${-9IbP*&cWA${-87H0=fdNBsu`C6xsrKriEO2l}d$dZ0e232Fg-xBNJu?@=iS%7e>6MNkP;230^w zPzsa=Z!_!O(Ra|kOF(P6_rV9?AZTM|&UF*Av_8`+C;@0mr*)WKO6Uvp(M(66Z&208 zHLZabV_JMAgNC3Hs0;K#S1*lX;ud4 zwTQAH0qA_%9cT@qx1o*$EzO!?HwSt_>mzU&d8C-a$G69=H)`38p1i8Bh=u0!IVpzHImMlAqB?1xLW= zK#Qzrz?K-+4|)x_9?;vnoq)ck;WGNGD9~DPI2Zx+9U}Q)eY=8w65%z_7&HNiAPF=B z%|Q#$66^+7fo`CPd3&B)I(XDE$L6_Zvu>e#7J!A|HgG$*187w?0B8x;1{4K_fz}NA zKBX^UtqTr=kHIHE=SH0bbw(Qlbbi&6WEdC-ssX*RrkAHyg0=a0?`{i$N5FcZRn?(f6{@zdEylKgM$0R13)W~ z0<=y_2(qX+LTf$)E)P26}C419%KP z4xR#&fnI1E1oX;@^ItmqfLK(TYXyW2aG(rzzwakPEhg9YEjyqh*Sg zB@g28D{z23dbxBA+Q;O3mtfsu$b4+KS0nQN8!AfG%x@0WIC5wN}LhUB{dOx^_|JbOF*9v;+A; z82m(GzW`lX)CUbfL(mvB0Zl<7s0iwU)l^WI70>CAu?xHc^jhjEpo@jyf!>~d1*l>p zfhw9rX07^DDRcxF3c3KTMWd`Q@45e@_Cf%GKIv z>;3LwKG0oSZof%I-T|t}D4_N8l^|MZlzUU?wIIq4;V<$1IrtdJzkF*^3}16j(Cg68 z0XaX6;|wzDTfm}@qP)U7(d1M&%9&br>J|cQ6V2PVxI?mZS%m6cu;DF$r+^Yrg16|5 zg;|51Tc{QzToi85E{57gEB%-T^j z7sb(V2f|kY?Xg-jXkKc5YHlV2O%tsn#5!xW2dzO0XbGgX1#LiU%h7NB0Ykwkp#B&JMuK!OoZZq3 zjKCNJ)Ik|wEXV{JO*x(qZUl3H9L)pSKn`aE6*d8=uvs8l*hIqD0}aA7FcnO)th3o< zO`o9zrdv^wGrUMA|xD6}-(M3Rna53O@GrSnw2^N97tgXXmEYP7; z3yT==lL|QuUIEX7hrl{;KZp*&GQtMj3!-7MumaqdCmhuuKwAS=gH>Q9&~UB=4}zz_ z!yrqAYywY$4d4;*D98cp^Ms`daxAA$fT-ig2rEw7<6xt;6_zglQGS~6W}vdrv(6Q) zL|ec!Hc}PZ3UYxm3){fU;3cpfsF&2LsP-b^HQ+h06YKzLpn7FD*ae=qcmZCfK~|(3 z?g0|zRJQb2!5Z)p*biO@`@mixM@p}uQCI~iUSZ{X&4xdOi&y?*WySrNZ(Sq(o8Y z(OUkMy@s@T)8`HUi#YY7a14A7G|4{((H{Op2mh#{?*0rM0qSmbv&QaIASZlWcBfl9 z>)!<525RgY@aH=Im9DhvEHz$jj<#tH;k+ZFPEqGaYoZpnTE1+HtgiISWVg^&`9kXb`lM{Q*9ud@qv5kvs*K`X z(kNb;gM^hvak5pge1vQoRZyCs1}KeMt@Nru0n&M2L|e*iTI@D*x|lB(y8~jH5S3)E zTH@YigNK&5wbSK9tEivgXb)+r77edKS8LTm6{G`eKkUAsBw<|=mV&kRRG|u|!O_b^ zEsRT_IMEde>$0)oO|6AXR0}RuRDatb~+n( zzBA73H*OW^gmGV^N;{Xa%;=K)#WJ_J<4n#yz1*GdI8AaVt#BW4c&aacrQ4Il87tkc zajMVCAWa5*pt#a49V2PBIZUw9T!QO~(G4%%irfmG0%OoO!BtJkRTNy+B(HL7^8ir# zDz`#>c_O)k64(oLN8okv2B>CMu5x>a)zP|+EoM%ya_jNfUCq_xz0&kq?IvO^TJ2Wp zrGxQtvU~@0RVZ6GXMOemux=~rdQhz1sSH=K;i|A4R)v~vM9J;|Nt+%;{>|U2XOP_5A zx{;-@ZUjy;Zxij*Hz%P!s)mraSGti(cT*doHw3!F+6m}NQfYM?ShsFYg1XqcE!Gj} zZfjd`B@dpsrOT_Hx-qLd>2ga+m83fuXVyMI=Q0T&a2t7x-O;FBOnBY@c(I#ccCB-Z zdMjSt0$E2X7u!j6KkZ^GUVSEc2YCjAi>~F+4+EX$o&^s9m7$|f^cXtX4Vaz}x|QN$ z5!XD3N46_@md34~yZ%A9sflBs>F~{Sz}H2N8IjC3A5r6 zH=fT_8hFO8{FFA`i1<`T9^$|OPH58xbt|%vg2d!QKyq>uo1D3 z=_(p*(l=7hXp{0a-SzrLx3N>oIFEA@@+jW)cpRy#X|u^KWtKngmM3GbqGQe1kCVTY zDfSfPB{*m06-$}uD0g8CrG})6dMqVPl*1gX?Q}5SB~|%Z+p<0+oW#8 zrga+!x|xG_awEOVIF#tJ{e`=HX+)Qy&@aYs%e{;QrVowDll~S_J6I}qvN}O zLI)@MLuc!LXcM)_Td_uF@KZExu!%h7wf1~F8rk}px|`jyHtgJIDuqJvJl!}%HQ!Rk zyU&pQ^_bbWgqt;8?G@Ls5p(JlvuU#%AAGlrd3->qOu|njEJD4?p2|F))3x$#=M%c- zh&)AqC-2@L9)GvAeM)7p;*k`aN zo8!+=`FW<&7U)hhuSlqb$=Jfd)0la?>8poKT7EJ=X?AYG+F@1?4t00lGRFsp;)5T> zo7TB*Ha|*evSUMK__adwQLcMmLi7hhbBZ1OesS5S4^gA~b(8BhNDh=ROSa;sqFFSQ ziq$f^hlVf798r>gi~HQ8`N^ap6mRr&Fa z2OIPq?NyGQlp7vqKN*~@=F4a4i&sp-cBqi)2_-~-g?9e?eXD&wt$i_aam-MzZf50n za?LUunuX%cTiY4%MdoXygy=8PZvTBlv6RLSjv|j8n4PA=4xIi)-ErE48S*^)&<3+n)=YEc zc`9>@`3)-fPF3$VSoYifAAPIyPpiMMzG%WnRZaa}Zkcj*S##)+`1AOCZ!A&Z;VPuy z$f+THr>YsTi(_Y!>CQ|uf9!J0Hfh62I*!!eoV~Z~PY<<9_WXJM9DTa*swE?~&zzDN zI$x5XpCiL3Y0OkRZ?85hG<}DgI>QiWnm1+5H)*mWX0~XhDgOduj(I}X7SrnmTItQn zM!{cenu#yc1^LWzrKw_`I8KLNs7B2wC-kZ9SAJCU*e7n7aI-3JkN(5Vgv00am;394 zwuGolbHz(8Z>5+gUU55^Z7;cey|ww*ON_z*Q{-jp<<&NxN0)o<#d_HcdYQOdW(jd} zQTG+M%*ATe#6PeNGoR#1c(Gd9gw|Emr5XB)+c+WmbG^$y>-O0_O|t zM^pbz!hEK|9|sQFvt0ByfZxCOyF2c9x!4Ix*9w5r&o(gS z_A=Wq>=bJmle?Eu_IgTZn+p4w#L?dkzJ2Jf6F+_U#jNu!`BTFaqQ59yuJWt~PyV(f zPs$}`Ev}sVO(hL9N5(rpcFUM=_i=)_FzRGu)BjbfSI8VW#LgJ~4dVDB_Y5vH=C*q0 z+tI*0|LVCRR`b0Hd8L{30cv|w{!J*=w0Z43jWLzp@;h$vYi=235!*UBZF&$Vcg|zx2nn3MW(W<5 zR>gN8-EVCD{7V0gE1S-%Kzu^5Q#S*UrShK}BtSdzyJ~PytpT zZ$q|&vdo)^O`^Y`{PQbYdXBC1hmIO{lKyqOY~R{;aa>SO+u@4-QgeZ3W2#i|Q2gWb z{%qC8m^KHgnqT~%I^|pv4O29U?J!$yYuT0+H3ex>LiE?1)0&;_*z$vq_n$A+Z*!CO zDXhskYF0aTOS#;N`3jy-5dC53ZDVQ`$qw9j|?`FC3MB6z6r|MV(z#tY*5tN1gq-Y^h1~_okbCeeVOaUixez?Y4)9Gj098dV2V% z!}%_sI_-RnJs*@XU%tl(T7Q}5wGTNt^*HcfyG!tcc4pN94zORe^PX|aE_M3G5*1n( zR_{0V4@GuQvO9`@ur`;!f6mp#j?MOrQNm=t&(KGINBcnA;or}iy<+_N@f&E?l7N-l zcBNZ&6<5E^fZo~FN2VPA;*Rs_o;Tkq!C&tPcEdA^yc6EeBfHa_8*VSjMfX!X z)%@M-Py34(EbqW>L}5d9_d@I5ClYreeeJ9x7* z?qYfV(oxBL-fHKA5dRA_oK=k=Z1=&Z*Ld#$tUN} zfzCj4=2L1q(d;H0>&Ab5>^2JiySpj+2{n!WT>GBv4F{HOdMMB7&z?0etXsm##{S;> zRD6Z5yNg#*wdgOM_B)$2mS_pl-*3;qVt>PRw`R^HL6V=~!fKhzK4m!bo@49lI((98 zaO7N%@K)}=Pq8j+!39awY1v1(tjO)YH=RAG7R;Yv;B%Qr-PE^*pN8;9FK?e(lV%Z`~djyNhBMqHS}X@3@1&wQPm& z-8Z=}@!j|Ii+4F0Zz`Xlw2CIKHP>MiPq;lUypE}B^8esw+Pfqrb8r8_O$pljFbO-k zxl(|mXN?mde>bJ{_qlfPxJKDy&T^yXV)te2&i%LdWqO=sW}L*iE`Xl9Cga86AMY;4 zd1L?5F_63Bq+2OSGj^YHOPIHRaWnm}n&dTO@~Lx8ipG>Ma|+YIpZu753b#GYMZzm) z$!Yq+HEYkfCC#qW?lpPBA#>%gUK(yKlrVSw>c;qyCGvUuj+d!~dGS}S`?r_@XF1{h z{;NA0pQJDCCI{Smic!w8->8jiHaVfvZj*o?Fn|2!mh+vJHVuC#{HIJe{?15nV0!0w zw;R`C70z&I;L5Mr8F!@P=2F>Sj?L~i4s0-SXPFFM9Y$GC=EJjYxxc&(;@9n&zl}c< zTEW%p9EYpC3u`}0uXF}O(P?giZfGV_XD)ZMmV|-_+}si+LYKuj3v#Q+hn)OQYHrPnq1(gu;FkMF&CvA)oIbf% zH4d!{+JlL+A=ga|J>vTJbsG71YLEJ4Z-cRqG!K<^YUP%05nAm;4=iSX%h1jCxMIe& z3cW?1mMKg?yOSSJ303g-?os8QvPXui=Z@R)(WcFh(Mo&E@nrto#jQh49d1r8=@^R7 z{j^OeHt64di#Ngcp&ri8++OWNDXyPD^~1c<4C)-ppL?ofXhw(xle&dU=Zn_s@G^m6*aZRX^4xZI|herB^mNM&lhk8XzY1cPYDYxylp<7hHeSH`X zzxZ4tUJm+32~$3mVclt{MZEbTHPqN2?oxbd|+^MCs$ zDc_Cpf8$nY8M9+ZXbX+~ue+Y}{^1SJc&^NJv-5xT?w08?Jap`eRrVv2hD9m|rtR#N z5OivBZ&llj5h0IHrJMdELaj-cyKF=#+X>eg=|@!0tu&IUk-KG7D7&}0byTQcZqx0d HoLBxI$s;j$yR47RuMW~!oRPuYi*81#>j&r_!FOSFXAL}u%d41lm&*$_0T-REkwbovH zzj#ZzgSV8sr<>D#N%!XQvnGrPXsh4^0+$5>xl^+yPMle9%#^p5tf(6QaWD`lhPc~u zJ2wyrWA9wDr&cf&TJm$1oFpXWy8<8Tr9P-Kf!zU0>gi(_rar($1>>~oTwb&-<6^6`eIDdq4fQzobj z;JQ;MXJ)pKv@GJgDQSbipEj`zmrc*Jq5w%JhD z_d0xZX6EFq34zDU1p-x-Dr54L%%*|BI&67e22+9DJ`|-oW@nAhnwT+VN{2{>TRx{s zf?viMSgEIGOs+d}N+56wTdAke2^rZl0<$amb_%Sz3~Qo+3Ix6)oxGQ^>7TFc*D4RD zIl1Xo{P-!E**9iR4g`*4D}RXebXwzoDe#JF{va)Y<#?9mtns61=F}J_T z-S;zm^n~f-@jH1qm0{Z-$q1Ftd8dZon(-4xWY*0XmbHS8p|srFVAX0mteJ4EqMz{{%0}WfqU*`0i9WHGZ)Z)ZJAKMHl6;S#f<{H0 zn5t=ak*osNjU%(hW#Yc)RetiOF#VL92x}swlTOuKQpZm}A67Bb#%GPp${Z1xI(fph zQKJKaS&>OG^>dO)tz3r_{YuRg{N2^0IT~}Bn1NO3b~h)u6!UTkozW%Re>F_3Vw?MWS>p;GyK#%5U7d$ zG0eQp&4#PNJyQG%Y{G7cy#@}$=UVy|{tL`rlY7|OufWW=TmzSf=fd$h1YS$^9j}L# z;0|j~ft7Herfr}|vEqaNHs|VV(^C!TAuqrTXde+q840xGq{hlfW zYo1x*9EZNThhLG!u;xZvbmg0YtvT^snjimVS_i+&=Jxap*hodxh4;eB zkORxXtMPt@N!V)n#K~Dxvd2sbOk)xfm7BHoXzV*q$?llS-aE^VL}XWy>A^Y`BW;Ub z>5PnI7406ZTru)&(JM=0_`Fvi;i;6Mba;;Rq_}f)w+YQ#`*7&C6^^R z+atR!8bJ-L4R!^;o%!@1UEQqX#tLjXRY>T_WX%{J3EH&JYmZuzz?>)58@1{nP6~$^*JjD>n=Ok1Oduvk3N6q-i{$kylM@PNit^R%% zJ^V!vhqLbXC&7J7{Apcmu|FFRM>2}n4+n9kxw${GqIh@bc;smD3C^yq=_THAST=0E zs??9JlOCyF?x3?j;*=-B*0l1)9nxh~80Du_z(&aKIn`o(Tte))Z+Bgbd8bb3V+lT)4hB3b<3AIVEj4VDc?zD{l(lg6s0 zQ6#%%%Scx9ROe_UuX$=r7dH?{iDZvTac++!wn%l}h-9@$4VMU!lIl88Nh-yK+F} zC|bm7ekZ<(rNX@y#e|vUO}w%?5YmWIR*R(Y8Z6b0hU7%axJokOp`h9y^?`|vqy`J>f~ z6P1m<}I!2Bn-4jXdoEo!-15%4fcJq{QQ4XLD zyvm-uJ2@7^ubs-6Zlk;ba-NE0bx95X1FeadoQ?@rC>QyHZ5g-pS5slAQEO~d$mKY~FlGP*Cxi*s5BQ<<$rRdO}OihZ}iPa)f zHzmdSC6bkv8ceJl*_75goXy!#&7_+n$*~yzP?IBEw2HsS`1{=`ELGGSJL+?^XKMHq zn#RFTQNL;+!0AxUWaRU(R4pbb)&VRPgT)v%i6r(;4KL%wE05m93h)2jYS=L;T!jOo zKLsbXOA7bJy2eYX?p%hYqX@eLyXs4kygsSnb7rq~XuWAq+CMNeMT)!f#%oNW%{pmh@C-XCyB@H5h+od-;n7$6 zgBXZ3Oi7AakJU1g-8UutIia?mH;uvNwK#!d(d+G!V&-7A^``2JguFrb_J=~X{r32K zS#KnA#WP}gw+U(v0RZHdzD`aqL`y= zu!eaF)%|XrK%hC6>&3Oi(xCgtoII?4o)cBxp~uw}e|ogTO2R6tri5?9@~6k7=E<=b z8eeZj!#~?7uYj0(bxG*8d6+_^;(*p7DP|c~19i0XY9w!HYRp;eHj&LkQ^KujXcs>n z$BGB7#aV#;*sbqZH{|V#ov~Ei81+hcEtab5?N-j=NY=2_a8-^6s&o-A{SYkm5shU> zUV^3c^mE^&@cUT9e2e2%(}w;SP}lZJ;R#rpA^wTvX{_dv>~<;PZwRSHvEC@Q#3$fgynTX_(`nZSl)R%ThsrpN*;zw-YiP*z6!8~( zSh&j#d)8~rSp++cuB9XTV=;|r??YJrJmjPh^CMPo@8EEKB2m2cv$C?nISM~CJ`iIE5SSrt-w{KzjYoQX%2PU{*VW)E>YgTIbW;6}}#8s16i=InX8!nGrGTFpo!0t_SpK?ys97WS8Z~HT>>akx2 zl#jjA+r+Z3@hqQ<5N6JJ&1C$%tstwmjDh*SoKw=P1Rd#ZV)YG^%G<XIUN2@gl}q;m>f0v=gnPNtP$u{9;vTs0Z>of1r&b|&?Z*8C7=y>55$7~K>Ei( zn^-;aDdl^CL$Dlu0kr)mR>m*AR6fh`SJoEGK4SSOd>J?eRPi%FL-ZSvpRSHlvxyZ9 zTDu@CVGOz|SlGs2j6)_n-l^qHsmpA#Kf`ic%(^cDD{D!czaUF0#Xk*X>>dOn8Sn-W)d=ner6jlXV!rK0o&8&(}DX$W(Y@XIO ztyn&FVA5c;w{}NZb+{hpFVI>4EUT=Z*h=3QR=R$$lBDaOWd-|NeSkVa8HOOJz+tfL zkxFG*dX~*F2A1P-HeRe*G6~l7oe3*ymi}2*{yEkz$nulp_=7+|$tCy>axKq;RiRs9 zP0uA(zt`%^tZiUzVg;A;uOyrYEB|Jz|Hbm-uqv=c1uC!=E&;y`YZI&HuflThhUK>{ zzh~n=fcXo2sDG9f{D^zG=#oq6 zio&W`aadzt&e|1W<*y2B6RQF>tX|9V)iC*U0u2agE6B>w7+qbS3M)w)o9@rBD&Cg# zad3B=PppdewYE4mP>bab0ck_|r^qp2O$jbi`y7*-qFV;+W4OYH4 zVC_P!-X*|a;645O11rOaHh!<={jePC!FAAdt!9^OpJ8efEBLwonK?vzhqJ>rx*$vX z%IXDK-j7&atQFu%Sk?Z)>SCokW%bjrqJFmgs|+@{Ml|p*EC*+m!L+Y#Pr;4~VY?Ws zH)3qOSVa`Jwpi|BtzD3{AIDi;taQaJ7q>dx)^k|WMwGGSe87kkvs|q?;>h zI91KS8csDct_JJxn+SQ`U&H45@30Q6SJ_hQ*!*Hu|7vTCRl9ny(l>(@)!cGRH(*NF zbV{15YdW#suGUJ?Yz0{!TiYCMVA*YLx{I;m_0(T{EvydiWbNx={sLX~??U!>bw#Mk z-E9J~9QClaSQi8Rtu0pk0LuemL$zT;ld%-7&`A4vk@0#)vYA);xe!tm4!>ewQN4If_1EY zF;>2-ZMp`qda_Z-p6?nVC_!V(O<-+e?Z_=*WoT{nf~D-8t6&Bj@~4_@CIS z&|C^o1#)3-3kJ4Z`$fw;VWoS?+OPPW6L^(?Hn9@CW)tkP_8YKzVz;&5w(;-6YUzho z|H$h5U~OXg+Yd|nlz*z=XEH3iy3qRqK?(n1`LIp+mF1%_e}NO${ub7l{$TANVO8W; zt2;!hAQx7}3t0}sN>|**mlSLMl_sD~tcsL@@fE0`1aL)Idr5UzTR~R(8aDlvunJ7H zc3oKc>%%IzspS-_w}PuH!!-m{;I%M+flmCB-USYt?TL2Ll4hg(+URsx<@bk`eK4$Y zMpzzW_3^OWO|teh8$a9fJR3hBu130bur9BkgtfsrUO`(CRNzxKLM;1fSQXf2?Po1N z2dm&0V0FX}Sesb+c3Qh2YbSfl#_zWAyJPAo8*>mrj^42m7vsVvt`0Z+uCC)$^X~QS zwQ2to2Tf)jr)nqF=@Xm0AWJ&LKeh2NtaM-6bOl-ZSBf_WsDgKBJ8F{^WF`9=T`f6o z<1fZacY=5&`KL|)gH2zMmF^U}_(vNL=XeF2wt`rb<2P6ZdxmATE2K!viZ5jCf~-S+ z1#}e@56g8GSf}^8u*O=Sfl&TNg`$Uc1Z|CAWo&E{G`0H0Sm~PC^hvNPm}2dgmRrHv z#7f`V+P`xb1l8mkST$>B6Nq*3+#OcN9+uNA_k@+NH>}NL^GIF0Bu}@|17NuwZ0(^o zc|lhEaC8+j!lu*5W3?4zwQmf%c)U$F(eh-Q9`31p0ST(#R9KFu*#u%8ru4ZJIm)&1 z^DN&CE8l!rn>b`v*0V>KMVK1UdtkX;0&8b{(Aq0u{sL?D&$803!-Ny=R^J7yz}>KB>_Mx4X891T?L2dD zTrL07Cin_gfk!PLvl%YNs>pF0FIK*9VCmn&v8HkZr)oS_K%e=EvZBvm7czqy*#7s% zPVpK;ZGVDQTF|Bw%MQVEA7i-?+y=V?tfP7#So5-7h-*hd0_wE7a^zi1=LmRIv^bki!%u5e#E*7o`r#3pB&5W*2oT=N@>Fl^>W>@D1Q@b0& z0SPfCu^Yl(35&ZS6gK-LEa;BVsyjm1EbNYu+ymi+grcT-4}>EUR`x)MGe;#XPb1Vd z4WYPMk%rK*C&F0?B~7QE2&W}%?uk&^oRP4x7s8-k2xU!PFNA)*5#o9ylsDx{ye}qJ{us=fb0E80~>X_yO5ROP# zIRK%qIVxfKK!mOX5$c;20}(n7LO3g-q3JXT;k1O!gAf{fg zLfjC9B$GY_A$BOjb_vZ*cqqa%60(OPq?m0IMrR;Y&Om5ovN8}V3`5v0A=ShWLwH@n zoM8xU%q|Hth9lG+j?m7`9F9ncguN0Lk3i^P_DNWfiO?z&p_5sdiI6-J z;e>?Fruj&OBNA4QMCfXcN?1M$q3bAw?q0|g8I~HNPgme=gi|~wu?6C*~%r*(5$01Z6hcL)wjYFuA zjj&t75EGw`@VbOK*$5eCmxLMP5$cXd7;a{cN2omk;edoplQ;okuY|=D5Js7O5*AEE zXf+Wb%PgFTkUR`$^$TmkMET4?fbuz*Pvtlwr$0-PBB}_7%rXZY_ zuz3o?6mv$x#;FK{rXox;c~cSkO+$#AhA`cvPeX{k5n;Q8nI?QA!ZQ-GZ$y}Fwn-R0 z9ij4cggGW_IzojR2)iZZnD`k8uS=LS17V)oC1J))gt{{kZZR`wBGjIRa6rPXCUF+R zUI~k5A>3~ENmwu&q19}Jg=XPwgyfqLPDof}n%{(QM8e9O5Eh%G5|+=oP4n9kj!0N}JHlpj zRKoHF2wfK-JZ@GjKMA&N1NZ5D>!k{}4o;G=RAoN>=5Vr^+ z-=r@>h`keGyM%2fd?&&)60+|^c+PB-FnTdU<;4iwP1a(B3U?vwmhhs9zYF1Y33Kj3 z*lBi2m~l5k-MbN9HZ$)=sC^H@0SSLIiT5Dvm9Y38gxAbI2@94Wv|56&%Pd@ikbEz~ z2?=kS=Jz5Tk+AY!gx%(-gyj*0t`UTH%!&v?$NLb@O4wsM-G^{m!sh!B-Zy6?Y+Q;k zXeq)6CT}T1zhww<%Md;?>B|se4Z?N_`%Ks%JR>37Abf1LNf^Bxq4IKs114)ZLWLCw zyCobn@hcEsmoR4q!XdLu!i@V7>fVp=g_(IjLhT0-4oEm`5+6X=D`D{i2w$0f5*9p& z(CR^iqh{fQ2+1oEPDnUrny*ASB4Oo9gcIhdgyjz*bbScnTeIRJgpR8a&Pq6GI;}!D zEn)L2gzwE62^&`<3|ftF%H*v^=(h$TZVkduCVdS;?86A#C7dzghY_BUko_>iFJ_yB z(Q6SZuSGa(veqJ0SckA%!Z{Pa4&ikPbJig^W|xE+k08{21i>{kA3>k$f@eG(RIKxnlAA#4_IKuF$*a6&>+(|jYs5eX|<-sE4C=hXfn@?BDyNVVjU z88nZ%8M@?iE(H6WIcbmE*G#R^i>$My|l-3Nqd;jh!v4G$_$+s48^qK z;dK$^z1_>}jLkoFbC7Q>derQ`HCQzmO344_*5JKC`gGocU}tyd~Z_lfUKp;Kz@bz13bo$8pz$3>it(l=Jhg+7i|-fCA` zts+|VLzuO!mVkED%#({eJ6MS}sxnbE?I=axN~wZY*lKz+g+K2V^`d5vT#Rmkn>75z5s0-RjVAFdu(&~Zs z64+9$R-bT3Q*t6Mybr`-wy{wS31354^FvQ*02+S~BSB{OC#o}0?Ydg61>uu+@VlXD#-@OS#+ihR z=%uEK;@2?jUwDq!DD&b-#O)iQPrK!`$MztYa!fJi3))r0uQx(3! zYV8PTm^E@S3`tWb-A1YBmlLiD_qW=0gf(KCGXr2XqyuPaPRfO*N^MNNN2K2G1fp-P z4YA3uN86`-Y#BD4`fH+TGZ`1rSETjokz8~IsS2=-ur9h0KItiZ0@iBXvA;J<<1a7< z==0_3))m&pSi)z_PPzESMm=bwvWYrtwUySzc(hm0w5>){<0gRNrsOnSj6zby*IE~o z2=LU4qJ%z$6A$?qVnk9n(+FWYpB2tR1r zOm|C{RU4J$RhxV<;niGxx{C_w{6Dy``FXlqu}C%Ap$|8^g-w+i?%d$o81v8!ce3-K zDLK=f!u83mGu_5l&Y)NHep?W@AOy6G(y~dzy8&!;&8IWn8gVP|{s4FotTb`6+^Wuc zQ+JkIzU*d{$H5a|3wRQ2HR-e5I&nJ)z64$dub3rd%6XgMJK$Zg2b2R^@stJnM6@Qn zCip`@pH7O{Zg*%+9pbMB`V{!j;8$=K{06*Fij(Ij!c~A)N7X?MP!n7Mt}GNVjc2=M zhiToTw?Xv!LLpEX#DXv=3bgns28x3cpd=^_%7C&!3!xYg1TN4bNN=Yc1A1%a*`V1p z+pW>`FNB`}TfjVUGte7EH-R}I2j~r>4nS{0>2<6*#<|HY&n>z5o7}3w%R{EcO>UJM zT0`lDp^Fr)Bkm#1Lz3a0ajJz1N8}LW!4xp0Zl=5*IYHn z?H{v=v8-km&S4rRv^l4%keDzIs6)wXF=QfU2N6r~zt%%RxC% z9_Sn3-(wEG5B?5503U(9V4s;Y*Gq9%dKU>q0)_7c4h zd<<>|w*alqv>J;C`bM8P$2^qlRw;Xu&iVrU0~`hiz<#qQm%+~^s1vhJ#Jz#e?^-7H z16qkz1A2=}uVys>4S`-CS_19`%YXs7KyM#qgZ@BEub)6F`H#SQhfeR;eGdKswEp_5 zUSP{7pjUz$0KLlF34B5OO4DB@ftG|?S!RN1=!Ic@1;bC^EzlG+1IeH{NC7QDE6^Ie z1g-;JK?zV2lmewe8J$VW2F*9~I23(Hhusbqf;+$>a3@#{w1gW7v|eiqN`m4*iwS+h z(wDH#il2gm;4`oQ=+vjP;aH%xi`FW`fz~v&KudZ`FI_#P-QZyY`Cuc+16qPT3dVy8 zKyRbzN&HLTWuUdxtKfC83%mi|1bQ`7FF|($|4=LGv5`PuSaAlNqu_LSAkeqVTm!Ds zTe6yopVOKzK!|V*_>J&65Foq^UJllS;a~*l2J~f6zmVi}p!I^*Q11a=`|@51+YCPr zwt^{OA{Y!lqM~}e^F8o)om=$o=i5Lpm1?=8<&ECf9!B9$Q^;SzGhiFo4)pCmTGMC^ z^9T<0HrI#b(aWe~(GHSt0~OLW#aB>Ke4Wtz0a{9r2aSL(igFwR-;&`2pl>L743xr2 zWg=S>r=?5>3P=Kaaj_|=0Q!KNKxfi@N5QS&kKtMrrkCw??Wb$KsE+{QwfGtabOE;l zOx0V`tqADyyd}`3T2-KL&zT6m$LZZbi$X2c6G0o|>%qM#TyIEf#UFu}g5}@=a0}2| zhrNi?`=#H5FTj4F_ujkMinVbWe|-gjoa#DgIJh4~Ypse2y6E{0=t4)8)745la4m=h zMZhTvI}Nm&ZwMNJ#-J%^29iKBs1E9b)l_hs&I&Jro!~W~i;XitR~Bc1Ub=k^sA8jl zD%zaPxV=Z1qbNUUooI5Z8|6$bJAE4gwy9>%ZSIg9U52s`1n?M81RlMs8=4Xz zwYN$Q!?B<&(8{(HC<%%H#l?Z5po9(U{o3L{EWH>g4YY)au9C|WW@%BxTU#Vx)G}Lc zcT49~Cs-9!0ouQ+ff^Q9!P+4;#p{4*y>!gf;OPw233LQ1TeC{bl_o&5OtY;4(9F{A zp&2NShC49Uf$I>oqox2&M@>sj$reDfL(2I#6jlMz!mhElDx}7!q6Onr z@IWB`#qp2ppTMu1__c0vvty|n%LDsC3*A~}Rp+%tJq*@>2=={Z#X>iMyYSVQLC>2# zB&@6h&^qu4(987Nt+b2XkG;&yTgKpGd8?15@M16o+zxI9w}A;jZnD5IFcf5f(V!<7 z4n~2IV1(sNcq~vijRE7pc%VU*-}&GcFjs>sM>m6cKn`yLDr_Pc3TA_7VUq|?2O5hT z!89=0vd(2wfGRh`YKof$W`bP6P^wVx`d5v*Q_2DYi@-u~hYjBcmjYhT!b`y2;4W~F zwRP|e106`UtSAId5%(#04Lk?d0}a4R;B`8@0xSncVbw^6MBzd3K!I>nUyHT|tOl#V zLtq(r7(4>Df(<~0JPEdd$G}GLDA)w@3WTKzIdZ%jJOQGPHxpK*w8z0;tgWzg6%gg8 z2|oo?Siyo7&IfOpy5zh1?;wAWqiwqKZZ+zsI$Kl zejh0PyWl;be5#!M?g47RJ75P;8LEWR?x1{6*kM_s63Cf2TF8FF`+y4C3qAtT0zV}D z0f-h>upp(`0pu%M$%1xH!33&RLAzl16XMj3!ZGjLJ;4`3_s~}CT&p_1v<`3E*M;w|1>Vz?al!? zP$m_$297!}7^li8E<_r|E3ZpfX%r_r>LbRcQ3azFQUjERMwjw3r~*YvsH?Q{X7fF6 zV?Ld9=pJ`KOfzDdn>I__yKV4;C2pNGIqF4P9d4sNq(xRVyarvZRSQ*+4z)L6_XXt$ zYYAE&PKW(6)9!Uk^I5jcd)-mhrx7z5%mOokZWm1jGeK4CD(1w!?tqfD2tI_g5=GR8ks9rk+iN!TjeHUEnMZ+Ow%Fv z1nzXzryF##zlZ+`8WI-v5&i`D|!OjZIBIJ(BJPM{juQl110P(t4XEWRI^x@LBroIgm`0!nz=t zY<3gPM;A{*IjV+Guvc_@RkvB2pf?7c2 zuLHYCqdT$Dit84xD*1_@w}_XiD`K`;`7mS3EPU8)9PUgKT`hGsF>9HI|BZcO&04ok zj=IjJ1TC%pWnGI_fxgiF)M6kG@aOFyx;?d+@DT7nUA}R<&~#qsR*wtgWaBzKvUM{v z*SQ+*K>n(A?zfI0`*t>R)VKqF^s%z36rP4 zo=-4Uf7C5krKvx2n54OzMvpBY|9IgmNJ>H_O)_;hxLp(4Q3eI)#+7vDPboj|DKA0O zddy1Smw9Z1Td~qkn`%Uv$BO>7%eB9esv#vZ*rAa5e1n_IC&Gqrbmt|EEaY7d=Jri{ zvs*@qr(PprGZNx%k~z20?dps)UGu2nA=9vRDBd}4=E?feJOEX4WBs~(*zLLv$L>DV zgv^cn%$LQQck|o|!3weF>pZtn@bXwwWs_Th57;Jc;z;IvPID^?abOo-FePBbH!usQ9fN+e6t&$ z5d8_z4~sP)U#e{9P9#sNN8K2GGwDgUvKhMBZNNtlmu#jQ?ajf>oNzpfH&_3~ZQ{%_ z8Gk{VZ+YYZ{;Gq({{JKg3kFl{A-abt^_IyvwxNN=^5hRs*R1 zVYBmRx4hdpaLP==4hG}RodZG@5^BbKHyd&*p3Xjz*SW?We)l(K{xvdte&g)XI1v4* zyJi3U%lnwwsfMLXDkQ&5)f`?eAvZU!jBM0nstDGbI#n-u^2iaL(*3OeKp}G*$B5Tz*&3 ztj=eS)~RTo&3Erli2kl;Udg@R-Ba9L*NV~lx}Xg+HAw`XbBDRV}YVltj{%a}ILapv&CnlH1TBVC?Z z`kdRiY4o>W-}<6bQg63&Nh+?Lovw`j3hZ;gK3X!h$+}VJJNdXdOIE*T@$5C7pU2;A zCi8hF(N_unbbp~p+MpVB>Yw#GqNxrZE6mpC-BGG`rR~30yV3dj=5NR626JpXZH%vG z3cWz0E2^0mF#AaM3ryz))qLjv$h5Gjgs0R3_NvYX2kSzps@9aB$vP1_wD8b_HrOeFKk4!2@L^cQB2pIcV( zheujB_xyR&^m|iM)6GxJZoNH&8DQri3m{qdnxey?jb^h_K50^Ay<`r_ddvJG+G`d| zJZ$Q}L@T|i)i{`V)v}lAfu`oomq^mnEIvVhULaa4D$X|zKP2T6Gwe9H`68=N_rl$C7oO7bT;XA+2 z-J?$xPJ9W6I+vbzLANPkv>LWSG9P=5Civ|O)@Wot!wlAIWPW~)*?D2Jt@Wx|`Z}ZH z^+h}f$g{6gf#|R7E*iSyNfm63 zt?O*l>MbS-Cy=*Dx5g|IZ8C>c(8uOQSwERp)HzzL?bl#OM z+4hjFF?-}Y_^^E*{e|KpEymQWbzSLC&u6yvSYe!xsE1$HADa7n5_NVoiR}toM{D`b zXd3<5;%?Wsxhl8YoA;kDE&9X887vraEe`lPnKR)pEvCES2gFoyV@y@m8rVrc-3DF;rE_deUGF7iBrr~Jf zAFb?8V|NpOmo>khcf_&QJEpfYojJ58jBW2dcFFyq?eOnr&3<6~`4L)Va!Anh2@+JM z=1;V^{Kbmz?j3nP!ER!z6VofV*2vTohwnTe^Nrap-~WEku(SFwWDHBa_AJLjD~)Zd&o*C~c?X!){<%k|fp-sZPHby3KF4!EQ~6V7N%R-P*UbH-Mu)kf61cQG%}kR< zg6L_C*Tz2njBKmSDpcNY+V-j2I9R%y`G#{`LiG2^U(0>;gXLQuDRA<#C%)h7pp#e7 zp8uQ~CY3c%!r~s@L(AO45A1HV_V(kBv8;bN@o*Y4B#&mMMH^XiVSVzoTsDz;qy zqOaVYK|jGe7e<+`$K0|0MGTjuow-o?>X@5tt7^s{r`rA!)jX`QUqAEV@!uCE>H<3} zz47SkFHPrBx8mQhPV%d0Zv4jWcCq^kb^=byKllw7tX$Zg{nmYl7g=|INA109tN3Ln zDXhCWmdYhtx07zS3oi!hnZqaDZ0;rG_x`8bJ817oBpfg7FZpYq{Pf!?<-g0flY#~P zkLJJ+7r#wmXKsPp6jz_(T7}ybLr<}z*3X}L%B>!xau58(#b-OS>asKqx{%1{=V)> zWeRz#SwC#n{LEFKcbPrUPa01~T|%3wzqrkOCuPl!U))f^u=(^CM$jfK@vB?u4|xaw z>h=g0>SCVw)$PLN$=P4oeYyInaMm4ZbLB5P>$Y%wLznxQa=c27@{BN)H zo7*e>rG-Kd{nv>;49%yE0S;F}Ub`=B(K;v8liMdhIicu`HlGDUqy1W4ki*>MhHmCX z#Y^`n{u}ow@|PD0wG8@qQOcQPmxZ=5t(nj9=7l)!VS2YX;(e){j-uTSbGxfA_;Ws? zdqsa2tX$(z%^l$y+t>x|T}1za-5-)NW_z*F8o!`2`BRFA=7fTwQ2swlhf2jb`S~&N zA*ZmjAir?6(4w$Cbmc#m7`m~DGe5s(lhE3rJxVzH^A9x(ZE*F5ZVT?dcsC`>nfF_S z-nZcpJHL15hb!3pQz@ZUj&|*3twQ(v2aThoOGphpKqJ_}Tt9})7dM=Fdo%|?W-$)7PIlNjfGI^;Ve Z8Flm3v!VL=qeg{td*zpVE|mA`{{vJ3=10.0.0", @@ -27,8 +28,7 @@ "astro-icon": "^1.1.0", "node-cache": "^5.1.2", "tippy.js": "^6.3.7", - "ua-parser-js": "^1.0.37", - "zod": "^3.22.4" + "ua-parser-js": "^1.0.37" }, "devDependencies": { "@iconify-json/material-symbols": "^1.1.73", diff --git a/scripts/download-wording-keys.ts b/scripts/download-wording-keys.ts new file mode 100644 index 0000000..0212721 --- /dev/null +++ b/scripts/download-wording-keys.ts @@ -0,0 +1,19 @@ +import { writeFileSync } from "fs"; +import { payload } from "src/shared/payload/payload-sdk"; + +const TRANSLATION_FOLDER = `${process.cwd()}/src/i18n`; + +try { + const wordings = await payload.getWordings(); + const keys = wordings.map(({ name }) => name); + + let result = ""; + result += "export type WordingKey =\n"; + result += ` | "` + keys.join(`"\n | "`) + `";\n`; + + writeFileSync(`${TRANSLATION_FOLDER}/wordings-keys.ts`, result, { + encoding: "utf-8", + }); +} catch (e) { + console.error("Failed to get the sdk", e); +} diff --git a/src/components/AppLayout/components/Footer.astro b/src/components/AppLayout/components/Footer.astro index 0e2dac8..283d80c 100644 --- a/src/components/AppLayout/components/Footer.astro +++ b/src/components/AppLayout/components/Footer.astro @@ -1,6 +1,6 @@ --- import { Icon } from "astro-icon/components"; -import { getI18n } from "translations/translations"; +import { getI18n } from "src/i18n/i18n"; interface Props { withLinks: boolean; diff --git a/src/components/AppLayout/components/Topbar/Topbar.astro b/src/components/AppLayout/components/Topbar/Topbar.astro index 5c82c0c..74bafe4 100644 --- a/src/components/AppLayout/components/Topbar/Topbar.astro +++ b/src/components/AppLayout/components/Topbar/Topbar.astro @@ -4,9 +4,9 @@ import Button from "components/Button.astro"; import ThemeSelector from "./components/ThemeSelector.astro"; import LanguageSelector from "./components/LanguageSelector.astro"; import CurrencySelector from "./components/CurrencySelector.astro"; -import { getI18n } from "translations/translations"; import type { ParentPage } from "src/shared/payload/payload-sdk"; import ParentPagesButton from "./components/ParentPagesButton.astro"; +import { getI18n } from "src/i18n/i18n"; interface Props { parentPages?: ParentPage[] | undefined; diff --git a/src/components/AppLayout/components/Topbar/components/CurrencySelector.astro b/src/components/AppLayout/components/Topbar/components/CurrencySelector.astro index 44e67e9..88cd9bb 100644 --- a/src/components/AppLayout/components/Topbar/components/CurrencySelector.astro +++ b/src/components/AppLayout/components/Topbar/components/CurrencySelector.astro @@ -1,8 +1,8 @@ --- import Button from "components/Button.astro"; import Tooltip from "components/Tooltip.astro"; +import { getI18n } from "src/i18n/i18n"; import { cache } from "src/utils/cachedPayload"; -import { getI18n } from "translations/translations"; import { formatCurrency } from "src/utils/currencies"; interface Props { diff --git a/src/components/AppLayout/components/Topbar/components/LanguageSelector.astro b/src/components/AppLayout/components/Topbar/components/LanguageSelector.astro index 2e6fd2b..27a6330 100644 --- a/src/components/AppLayout/components/Topbar/components/LanguageSelector.astro +++ b/src/components/AppLayout/components/Topbar/components/LanguageSelector.astro @@ -1,8 +1,9 @@ --- import Button from "components/Button.astro"; import Tooltip from "components/Tooltip.astro"; +import { getI18n } from "src/i18n/i18n"; import { cache } from "src/utils/cachedPayload"; -import { getI18n } from "translations/translations"; +import { formatLocale } from "src/utils/format"; interface Props { withTitle?: boolean | undefined; @@ -12,7 +13,7 @@ interface Props { const { withTitle, class: className } = Astro.props; const { currentLocale } = Astro.locals; -const { t, formatLocale } = await getI18n(currentLocale); +const { t } = await getI18n(currentLocale); --- { diff --git a/src/components/AppLayout/components/Topbar/components/ParentPageLink.astro b/src/components/AppLayout/components/Topbar/components/ParentPageLink.astro index 95a5a3f..3a03726 100644 --- a/src/components/AppLayout/components/Topbar/components/ParentPageLink.astro +++ b/src/components/AppLayout/components/Topbar/components/ParentPageLink.astro @@ -1,6 +1,6 @@ --- +import { getI18n } from "src/i18n/i18n"; import { Collections, type ParentPage } from "src/shared/payload/payload-sdk"; -import { getI18n } from "translations/translations"; interface Props { parentPage: ParentPage; @@ -11,9 +11,7 @@ const { getLocalizedMatch, getLocalizedUrl } = await getI18n( Astro.locals.currentLocale ); -const translation = getLocalizedMatch(parentPage.translations, { - name: parentPage.slug, -}); +const translation = getLocalizedMatch(parentPage.translations); let href = ""; switch (parentPage.collection) { diff --git a/src/components/AppLayout/components/Topbar/components/ParentPagesButton.astro b/src/components/AppLayout/components/Topbar/components/ParentPagesButton.astro index dae4c82..2189d4b 100644 --- a/src/components/AppLayout/components/Topbar/components/ParentPagesButton.astro +++ b/src/components/AppLayout/components/Topbar/components/ParentPagesButton.astro @@ -3,7 +3,7 @@ import Tooltip from "components/Tooltip.astro"; import type { ParentPage } from "src/shared/payload/payload-sdk"; import ParentPageLink from "./ParentPageLink.astro"; import { Icon } from "astro-icon/components"; -import { getI18n } from "translations/translations"; +import { getI18n } from "src/i18n/i18n"; interface Props { parentPages: ParentPage[]; diff --git a/src/components/AppLayout/components/Topbar/components/ThemeSelector.astro b/src/components/AppLayout/components/Topbar/components/ThemeSelector.astro index 9854f90..a464747 100644 --- a/src/components/AppLayout/components/Topbar/components/ThemeSelector.astro +++ b/src/components/AppLayout/components/Topbar/components/ThemeSelector.astro @@ -1,7 +1,7 @@ --- import Button from "components/Button.astro"; import Tooltip from "components/Tooltip.astro"; -import { getI18n } from "translations/translations"; +import { getI18n } from "src/i18n/i18n"; const { currentLocale, currentTheme } = Astro.locals; const { t } = await getI18n(currentLocale); @@ -15,15 +15,15 @@ const { t } = await getI18n(currentLocale);
{t("header.topbar.theme.dark")}{t("global.theme.dark")} {t("header.topbar.theme.auto")}{t("global.theme.auto")} {t("header.topbar.theme.light")}{t("global.theme.light")}