From 2cb348259ab1ba6645cdce69315adb266f75db85 Mon Sep 17 00:00:00 2001 From: Sol Irvine Date: Sun, 13 Aug 2023 17:14:30 +0900 Subject: [PATCH] add basic internationalization support --- ...atcher-npm-0.4.0-9a73a446bf-c65108e9a8.zip | Bin 0 -> 22534 bytes ...tiator-npm-0.6.1-bd102330ab-e39f985874.zip | Bin 0 -> 2870 bytes app/{ => [lang]}/[page]/layout.tsx | 0 app/{ => [lang]}/[page]/opengraph-image.tsx | 0 app/{ => [lang]}/[page]/page.tsx | 0 app/{ => [lang]}/error.tsx | 0 app/{ => [lang]}/favicon.ico | Bin app/{ => [lang]}/globals.css | 0 app/{ => [lang]}/layout.tsx | 17 ++++- app/{ => [lang]}/opengraph-image.tsx | 0 app/{ => [lang]}/page.tsx | 8 ++- app/{ => [lang]}/product/[handle]/page.tsx | 0 app/{ => [lang]}/robots.ts | 0 .../search/[collection]/opengraph-image.tsx | 0 app/{ => [lang]}/search/[collection]/page.tsx | 0 app/{ => [lang]}/search/layout.tsx | 0 app/{ => [lang]}/search/loading.tsx | 0 app/{ => [lang]}/search/page.tsx | 0 app/{ => [lang]}/sitemap.ts | 0 components/grid/three-items.tsx | 34 +++++----- components/grid/tile.tsx | 21 +------ components/label.tsx | 16 ++--- components/layout/menu/modal.tsx | 5 +- components/layout/navbar/index.tsx | 5 +- components/layout/navbar/language-control.tsx | 42 ++++++++++++- dictionaries/en.json | 6 ++ dictionaries/index.ts | 12 ++++ dictionaries/ja.json | 6 ++ i18n-config.ts | 6 ++ middleware.ts | 59 ++++++++++++++++++ package.json | 3 + yarn.lock | 19 ++++++ 32 files changed, 198 insertions(+), 61 deletions(-) create mode 100644 .yarn/cache/@formatjs-intl-localematcher-npm-0.4.0-9a73a446bf-c65108e9a8.zip create mode 100644 .yarn/cache/@types-negotiator-npm-0.6.1-bd102330ab-e39f985874.zip rename app/{ => [lang]}/[page]/layout.tsx (100%) rename app/{ => [lang]}/[page]/opengraph-image.tsx (100%) rename app/{ => [lang]}/[page]/page.tsx (100%) rename app/{ => [lang]}/error.tsx (100%) rename app/{ => [lang]}/favicon.ico (100%) rename app/{ => [lang]}/globals.css (100%) rename app/{ => [lang]}/layout.tsx (75%) rename app/{ => [lang]}/opengraph-image.tsx (100%) rename app/{ => [lang]}/page.tsx (80%) rename app/{ => [lang]}/product/[handle]/page.tsx (100%) rename app/{ => [lang]}/robots.ts (100%) rename app/{ => [lang]}/search/[collection]/opengraph-image.tsx (100%) rename app/{ => [lang]}/search/[collection]/page.tsx (100%) rename app/{ => [lang]}/search/layout.tsx (100%) rename app/{ => [lang]}/search/loading.tsx (100%) rename app/{ => [lang]}/search/page.tsx (100%) rename app/{ => [lang]}/sitemap.ts (100%) create mode 100644 dictionaries/en.json create mode 100644 dictionaries/index.ts create mode 100644 dictionaries/ja.json create mode 100644 i18n-config.ts create mode 100644 middleware.ts diff --git a/.yarn/cache/@formatjs-intl-localematcher-npm-0.4.0-9a73a446bf-c65108e9a8.zip b/.yarn/cache/@formatjs-intl-localematcher-npm-0.4.0-9a73a446bf-c65108e9a8.zip new file mode 100644 index 0000000000000000000000000000000000000000..204f609c5511964c7a2002cd11933b70574d015b GIT binary patch literal 22534 zcmeIa1yq&Y);~&jr_$Zs0@5H2Qi61|=}tj9r9lwsMpC-FOH#U|QCbwF{+sh2R5<#6 z@}4p7xZnNX+*PL@b@>1Xs7$8?opy)l!zdro?KSbcu(#pV4+rrAg z!Q9Y}QU14oihcV}1&pk0Ep+Wo|L#XLzyA@y(%zij+)7{9+z>d5zKNmj-+;5;X&hZW zJ9}GQefxh82nGW4FT#zz1pGunK|tETKtLq^*?>ZZcJ_jfx&U)sJ#$0pe@&jj)Xq;q zUCxII!(+FYORu!0Rp(V>HB?69E0eWTy_ZFJr3pylj9g`lR&hJ640^nBnF~ilt}3J^ z84#QV$L3j&FkJDMS`HK34?&EuNret`~E6@(Z>w;rOV^QkFh~|Pzerex; zt#B!bk1!|R&svlwA(O`>@k1rw*AdVGkz-e1KVpAG&N7`mEXnZ?Z+u z5PxDN@69 zD|Hpf_M9X>+LgmmfTkl@*-c9focsfQ6pP{7b6c5SAx`|KPsv_!ymJZu2w3|XaPFBL zTm8-Q__@f`Gp8EBlNj{6+*63op^y0B#yj>f%TD4^5E>u+PO+?%G>dYY_N%>LdS~#% zCD|`DQ5^BhrJZKbQ z3+a5q`>ba>#N-2kyZaum->S>-PDOG!3lQ5-N^szjKX_*sg1^(kx=WgY9Wznt8D=qh zKi9P*)C8k`x<5|Q*g3iU6&T4eZ1V?Cd~2mFs$moi^w;6DPV{7gCbjc@_#%+lZvmm) zpC1e>>3;P9@)=;o9N;0l@psidwR~V+~A-r^w_1a z_m$?jBIx}B6}zRJIvJu2ztmI>pGkFfJ+pFmVax)^{U0E z#VsBNGMNqz1VrRcjQ%dUD<+Ep>}CEkGr$Ggpdw>6DuB{(`h;$2$ieIrMzy>TL?)E7 zsiH})67`#c(1)@wEkBiL1qi*q9JD+~eQq(WwKu@JJ5c{>3g0av%Tu8RKm=7}!*>en zRU#Z{g0SFR3dV4uQ>{s^k%@(K%$I2_5zl;2bpxpowr>#zHW_p}zUVQ?_PdB+Mx{hl zR65TLWRs*J6huvZ87_rEIWwXAub8=Hz*?L6W9}g}vGjr>o995YFxfd$P)W@kLuUwa zot{EXKY}M#*^FEcTpZxRRe<&;cj0-qT`x`S%pToBO7pUY3-Yp>B#{mkU?gqE5Gyr8 z^r?1@D2$loK6;H@Egos_2Z13nu>sjdN4R|SsVxY$;Uuq>j5pdN@eG^VFzRy;NNJ}c z>q6Cud-Od$+a;v4`xSeLY6oaJe!S>tm2Fw!G0AlX;x-rG8-H1i9`?SrhKd8 zXi4pYDfQ4%qK&>zoZ^73>ri1L%+>Hs09)yD#)x_@qn&KP#Kr}|s@04q&l;1(xE+02 z`R3e`^ee1c{#-zKO?Y8as!S_NRe6Hk>f7}ew{oo6(3*$lkE1&LI5~UKeM=6Gl~g!B zX}vT>9t$n!SVCV>9$o^7AG4qawQUDq{{v zhn+d^%`hJ7bfuEX5=-PbRAQm>*UtWwO?B zpz!qqdGeu(qIO*tzHW{2i_+(eY@G2v-OhB+O>J8qCG9eC3}+J*kSU=`>b-L;UR7F% z7JI^e>W*zVv2KiAyjFG~siB{7X=a9_v3zUE!0$6P`U96t6f6jc_??!_mGS($W%JnT zH4}=*`V;4AVd(_H+HJ!D3Ja+zj69hNqgWbIRNFvUl@~oP02x_lUtgiX+)K=4Jj880 z-8tPEVBAr2OVdq&`wsy{{lez2Jc@>rJ_XI_)1=_;cl ztK&W+`oOX7OQTpUIAqq&-tr#A_8~EnP^-B3#Rory2K90%?Pd=AnBc|Sdo^`d<|RSI`c>5C{E zYGR3D+DGxmDAPxzw0v|0Zby*o<^14`j6|2*5WFJ+c~S4AOLO;(?6Q?U&d%oo`W$he z&IrQOW62MjCWmAc+gT0Qc4en)es{KA9R^G?8%z#tF4$r7`?5BSzXG&>M{%F zMUa!JC)lv>uZ`$*hnGjdrOT!%P3Nxzyt!Pgf58I!?d7E$dENXb)FVX^cM4yV=p1Y9 z-DfW01+Cx-(=7_`1qn0plnVvTaS^~j6(U7`X?_x;PWeG(+@XXugfVtOWSB+`TqF)P zg0-dSM_-4DFwA zm35`7a1ZS9K|T0ViPxrV-oP8}6^U~R@|UA*T3tzu&$+* zB>?D%0$l&?(@6vD?63SfIT<0E@^)ucgq z2Siv2C*LwcJWDH}pd*$_TPCnYZFvs4NN>Sr6|D{L%P_kJ(Zu%Zvy4ISb?2SjaaPblYr@zGf}UNGm8G?zzmTi5Hg_7eXQ0HyIjwHcgTUWaKQc z%ioEiH;l(`nJV+51+J9|L16bh*b^JS8UYoe0mc;-s_qy(tFv$@D`P;1>Y{FrqD=#h zzy-NXS`aE!+)0FNbgR%Xt@&wz@wP4D*8SZOe1ZcodVZ5`T)-Sn)D+G@a^dh`WA{mU z&lHvZ;p}Frdc3YQ1SVn5ZJU?H7fzpQsWZvIY;AZwSUs%HD83@KM8>kODu1za2xpH) zEXwNCeqU~~8M!2EM)v^e#5QQBmrYA|aOpmG8t z7LG(jCTDrCUc3XUpTZ15p4nmBL1x5c64ihidhRtCQaZXqP;9F(*=KoYQNX*F@)bDe zL851of!rqivh?&Ejbe_~(Xd%uxqLhx#0tULx-`}w^|5-?@xv9&`vjMtSBvR&5L5<~ zuzJh}E=6NXAF+@)ZbA0$`+N|74tEjeM&pi&8{`N@=LofS_`swXqrSeGI6?yi`~01` zlMHt0BEFFcM?3qghrC&BOg$-Ir2go z8ak|VOIOh@TN(YLfkJ15O8Q9ebk5D`>!6B^8C@G}awf;q*r+k&ofiu>Io$rBre-*S zWud(G=7v459gGqm(X6<(49fFEPbkcy)T1>q_D*j`#SRaNGlaK($Y~3Eo8YVoR~i?* z;$|zgo^3z1I@$<}_DQ;`DV#(M801kkZ&c44w3romqsXLj zeUnyy3^tDz0yQ#Li|pBW3=D29!iA(Mvh&eyG7o|rZ%25&a#+#Fo{l2cd~IN##gz9z z!k0=Kd|4!RJ8Aehdb-1q8_~vsm)V@1-4Bn>Jn#buMXYUESMdDFUgPv;5cAH#I(9y* zcHEubZ=6(hJ9k(+!aZ9CKL@+X|8Raxv`HZUlYnbb_)h%)Zr-J>tjrv&e>ndRG1@>c z2BTx)1jFf5S_G5$`vy9?kxDF?*bxKGCwU`m#BsB1^LYJdlv^09b?+cdT9^nTs=uz= z6@}Al(4%Ieu_;=9Dj@LC&2DA4Gzrs&WR%ZsBH+W+pt|q*I-9EaZcw7mx0?8;ux*)TV1bnR(sJw%_0OiPx!955eiA`!kek>Nh-Cfr+vr*Ch36W=@GT(@HGaM4t z06LSFQoV3w^4^Eq1y>P=Al&pZKX9%T9zsWQb>+juW0HFnA^_N; z2m~)tw1YA>wtgYk><_;uNt5Lt|G6TC)Es*m?UJe4AK~y(1^wx=4XX&N_$nV!ob2<= z&&IP}cFDZd{aHQw!v*;eLSB%h_g#--VRm0W!Org^li6va?3>9SXK9eJ+=*Hhjq;Fc zB>U<$RlJ~F#lk+FJaxK=2nYS2FLZI(Oq37mM)3+mspt=;cOVN=w=8zY8ymDNbR_UEPct^2 zbq(_0R2*S2UB6(U;y?iv=h2-M=f*a6TY3DVW+dALQ2cifF-WyC1L9SW#PnN6NrWth zpQ4Dg;!rx;*jYO%LTuL60dQWMgY9%^^*=kjWG(CaK!*wEp~Kuzmpm8Y$;%(Pd1lFh zxVEAzm_0$}OjfmW|2;|&8`R8^ZAW#vdx&zy6RPpmU>4a0F4>U?+kz#0HO)_mP*?~$ zc}f)Tc;)=Mau_6$+v1b)2wYCl+Q5^uQ(UkVF&Q3Xd=?dh4E5p|H=rlqqn+?Lo|kn` zt!)Wh(};bLbU=4D-;c5?k*k`}Y@qL={q&18X-?K|xxwk4z84=Y4I8}!UZ?A$XVJXi zGyWA#py^5i#i?M~L2Z?eOd~d|8`#G#&>wB3`Nm4Skpq;`l}WSQ0yLOhVJGt!JfmZt z(Mo5|cV)hzh1Br6pF{lR;*>rtxokm+-7$}yhfl1lQ+;mCUJb%X)cxQ?jNIY{eRK0U zl*WcdPs4t7+cZk?eI3!Am*fvd^G$=y3E}*iY-!37j$Y3dgbFG#L>0~<(WM=57_&DS zS()jG7Z%>~TK2jseUpLWE(ZU{Zs1>{R&=nowz9Q1H25pJXLscWDr(BjFk!fVEv|+` zCd;zxt;Fu8u<&FjcGwmZ6cUPF&92ICX@A8}Los&AR|iNfk6a57ulbs2_pU}3%?h=E zwbWihuyfRn4nJv0L*=+_11I$K^#{em&@y*%u1BYu@9JAKk>8bI^e$6#Eu*Ta333Q< zk9}*IK-cbil8ER)jq&stL5kj(iK<)S-kvN?U%2r2A|WGUHtfJe2bmd)vB}&-R)nN9 zCI?B~F_O5!dINzM0bOGLHXym~pbb{^wf+eeAJY6fG*+LJsl`Yog|a@&NaI**;3E_( zhbr}9!T2*Y`f^*AugaU5MX5Xb>Seyhoi#C_T?p>toB_L$uA8_OzEll(s=r9f@x8sVEQ zu-3CH4C=J74mQ+e<-+~50TsI4dPp({L4$Kxlr#j@SDp%J%A8L8mI^7 z!2SBa@Lqqf3kp(F!1dnIJ_>BOgyR2P;8iWNnw!qs%A;KJQL$fM}Yp~MPEcaVKmh87DNq}$hY zfkH$c_>n^?a;h?=+$B(~6fLb6zP>8{5OjrKK5pqmyw4Y9%vj*G#t++%(=v9hQis4^ z3P@s`g!B<@4nxFTQH?0h2$|{hwr^+{P^9=g=J!X?sY%7Q&c8&G zkVn?GTQKua62E&u*kng4*Qx-5R!Z~=VRZ3)0K3~Dsx5)(SbmQl!N5%v;L(gs<(a%NW3(8^Nh zr|0k{6Y@+k3XDRxbkA4UoKDLt!YUAtc|WT{h8h-AbKJD-{qgI_7wdcL4G9bpv zUiA`rLP2YW21@Vi1<(ttNKBtUPyns8g(l16c*bWGE3bp=k{_F`$eH)8y|{!>STjkh zxO=_)@kCIGOdLw~i=fg#%A!7B7iAnRRAQK!$pIRL*fQNHo0qzqI9)bd%yuF;GH=b( zit(3h{B4^c8+X9Bp01BO+)JaBb3M?GNsNu5;n%o8bi(8&7jnvq*nmPY>h|>0l#5AU zf3%)zM$W&}-k08d>KnM_^g*yQ*#Egd_A;Mb0kbPxe!kZ5VQNv_0=~9cF)(_HTNyM| zWi?n7nl+U>bx$Vq*p#`Jnta-ND$40?1@@a(`yT(d%bF9B9#swfb|e-PqJ^c6C&3V= z^i`bG$yF2Gl(_i#K9K?B_h-ZBNR1L2gsXIy2s5PQ#>J1s)-|7oPl^mj*jnrr$En4( z;O#6F^Kk9o^9~Ax^|p!%+u~0MvYw|Nc6mL%mFj%&7zJ-3Z$7fuIK_0?K9e%RWNd2s zaRx{KGIS#DUiU=``LyxXOAIe1oDgq^!f1YaM&&NhM`aQ(I> z7Fd7&P476LTkC6r-=m(k@1m?WgQ1`VR4u=TM-oduQFTPPel-ZIoTc6r=uy(qJy~e< zEya5W^8xibQ52?o=isbG1eDU-Y@ZOd25_z9rDLZyC%&>&z?IU)k4yQqZSeceb0c2d z+8^d0aJCf!eFQsT=JUUB3vXMREENl&r9rva(Qa`O0CZI*8k~>3VTdTCm8aYEL>!1q zg}L`ivU(_!QbEkS{dD_baEyp#%xUQ}agzBtyLSzdT^#CaCZBx=v+5bEutkiW$_3nF zux)*;OA!Wbxb-Spij_9MN`Ivn^0I1e55sr?vkiz#uvw*bN27~2`*!M+EyPUC0Lz$X zj1mjpe6V5S8#a{mUj4|mW^9VF812nVwwZ{yuAIIU%mFM&<)~e%xcf^O<#D9nP|L(D0-?zPSG)a z0RB$?LJaNnJ_^>^WgU~?S}BGsJ}(9Xwia40m_EwG8i*#bd+&yEMxO07x(B+O<@FX) zKhWfK0K=%KdaK-H=tUv6o6vHyFQ8T|hmapn#_n(BUw|gtQP{{TS@uesdU-#Y4=GJ6 zMMJaf9Ux;~dZax(DkycP6I+^^!g5YGHj$>$CQ2eQve}ti2An0iI~DXT*0)}CF^SDC z`dAmjw(`9ClK>-}3~WZ%gA@S<$w9ALxtcV1STNM-7|9IW;6MQ^^I3A_V9=wm4BCiC zE-9FhF4FODE@Z)CsGX5?eWbtSq52H#SLR!mDR=K}9m``S1@$D2K#rkjtQ+r+8TJ#5 zK@?Dc1&h6~lnk}ZvOM`V>CaUj258zJgU{`2;D2EJk$u$Cy966dLq=4{jK1mJ%!$L3 z)+{OU&riQTUh_}w%C*5Dc}3u@H<}1ryW`5I<6|RT!*R@*`=qtGr7gt;+L+r{$EVW9 zpJFrhqQxK_JE>E>+%F$bX1V!vctY+Cd}Hu~%xQ>F2T7@6c`bSS?@R*F21I7w+tk&_M*N>_%HEUAZFdm4r zo)ETxJfbj4edWHmIkW;XKQKG#cq++wtinHpdhb#keG)T`hSHW-J-!=@NgZEjX_t}$ z*+Pm zYQ^XL2h_BKEZklL-Rl#8GB_a`_j_&7@zA!f`;biTnKxTw(VK`9W4Xhe2%01}n|{MZ zMN1}aoomGTBr%|G@z^}B=A7*XivwIOo$sjBqtjvRE58GnOa!*8a)?=aB&Dka?p5aj z_8a98KWZF)QLgYk!eH-WZFqH1AaSrWBm$Nm0QBuic;MvpObzwz84L`K0G5XGwpP}L zw)QSmhR#>V3p+X@5^ZfmJDGo#U69Zbxe+<)nmZVB6WQB37!tWt^T6GliFiXnWLzMp1ppf)1cKx7w z`M7f%@D#;n6F(W-k9SmL&xT1Wc0AwI&`VC8a}cifStTE-;`EY)-zj|Z{)OJ`Tv9tt zHDn6y#TQVn#in_;>IMg=vqs!({CIv@W47RD{0zA#Czq;NEt^}6RxDZ&O}B!nLC=`d z^MK0L4RrJ6?xb8dl=!y_28_11F(EX3eR40tQ~5WKOhb+|&DnAvEaL>I_* z)3SluL~xiygra`a*E92+^jW0}e?}DBKGT*=|Az(+%HI4TIP`FY$mGVxGH66(;}3WoyfJK1Um&m1(6!) zU|L8|;va6-1YP>16zGPNGyS-D%+BS5)(QSQAXd2R?>`?rE)=4 zX^`%XmIBk$lQOyi5;4wOMF8W3ul3HE{6QIH&e}ZcjMAGNa)aQyb-E1`uJUdorVZLs z9EPyDa(4C%FESM?u>9&ckyi@6Lf?Xpthov^ZIa&#Em0pPhky}RvrJi@RQBqSdTfjy zKiWs;k_m;Gk<4V;HI~USc`~wl=!_&?=a2Hf#;`bBwer&yY!r590$d|L04sBE~qct(lU@$i{Q&ugw3Fr-*%S1 zyl>d&;gM!7+2Klhys-Ptrp4dXKu8bA&21O==D}|ox54cMs10F2&G?4~*ufrPer13| z<^R%v^(XPk3d5G@l&Z=$_fV(3uqG*FgmP&LdA!9~Rx`lgoH^l?zl4W=R`O~6Ycf6b zRWX*cp||e}qm}9_iBLpr=i(L6*ptj-n~2^G81HlecS^ImE+TKFXE|; zMC;*~!EvnuaNw0aFGJ4!G0p3Yrc7TMcLYB)SFP0PAgwc;NuHL}YWp;?Mi>P!-#p^= zNa%QCcy=_aDH6xPo3i69ghNZymgTvR^Hk!oUAX98*wZ+k7oOCZLXT3B=RvmB#YdN3 zdVui|Aai8Xm11Zb9v_FiZe)+H>-05EY*R^y1 zhlC2_L)ma73wAyaDek2VBR4e53Gs?;)Ws+6c{0nF^!tCRTWdx zc-y7*e!%%w^w#Sre3etrR^ji_2ZbjWWg=4L&Z>DQ}wRc%r zhAQ;QwlSg9f2B>g_T^6d41y{2P$93uMwqDP3kUNt`3$v)@?}y5de!Rt*G`T`j*hEs znN*T8m@y&g8apo(*`A$9ZV=^+Fwua5zW1ixC9y*ugwG(Yp|DdxrhKwkR2 zME(7CKla)MSZe4C&d>avHsLEy1*k!X3djp>lNzhyHI4#m@mdER=NW@mI>Cb<)fm9t zoN4w?B0EPI$~!xJ%`#qp7{_>57+HdiLI&0+_Lvx!b;~et3J3Bf$0nNv%zMT+Z&1^= zDj47q;@%1!xbbz;JmJOH3fsDZly+nsg;X$fIbSw&F>3j<9Bb*pJ$<>mSl zy!|oB$5lr*Rus$~>Vc$PG5hz>gn9k$O&R50daPI5TTl{<^2O~ss=^~?ZTDmJo4>3( z45{iOZq;-`4%a4ZY8g3E#C^_Ire<;0vkp-0BeY5&6s*N zS0I!rd5UNYe0&+y!XZMXQ1OZwxGa^*CVn@0i77O{sIo!x^YLI#L~%$x%{Xs;86}q* zYLO!d_}P523%8D^CJ^IjfqPKo&cZroMF*ICQ$jI9yDX}3ny71Ng7?Ry0g+ac*{Son zPdV^5;e885DwMigC+bI#yMx&m-yM4zb@Z}4evA0#iG()8$0Rg4T0~kkEW8l-u-?h^ zm0~3m8pcZ$?Rn`R9 z?^c?uASx&#bEUcD{XB4P|>NG(w68=6j9%ycGWbuo71 zDRTG}n2oZ(kaYv-WdWd}5Fy8KG$_j9)1*+;Q=2LlXwMLlmuSh>f;aE;Ty&m=zn{H1 zS3?}`H{rl}P6GQs^yq(8q-wxmZ>RaMQVtZ6-IHKQ#;0R}uFS!?##ZOv7Nr$lY_L5l zyvO^d!|C(>F067`ex6`BYw@u$1y5c-FqEk6IMSnj^y+g#dcU*i#}eBWZ?Q+k?}+tU zv7l^sBrb&7RN!hmBJLpo0)kR^>Wy%D6O(tAi*?Vel;qKNC1u}he;KV(7TgKxp=`$I zw#uzc?pNWxRT%U$-T#HN`M;9(msXvM{Xluk0k=Id;PW4xX|L%1sb=;{+!hgna$w9D zzPqQiTCJdyMC`pCB<(04U>RN62nY5<2S%`DTcp~JpR?0f)QcE>^Hy^ohrudx?yu92VlC3z=) z-8h*1U&XUUw0p0kfxPMfcG)}e?0cl(H#K5cx+W7U2-hlrAo}&8XmcnQx1tEjmQag@ z6%j)#TcsBuyI+Lr!;*ys>XXYu@%bv3WI?2)EqOJmqAqVyYB(BbK`SA1>}OP8znDn& zjSQJ^Z=X{{(&9;?IBuMX@<~f1M-LA6d7`?h>LdgXnBWO1nRL6nfC$g2c7ZB-9`(&l zTP|w*n`;pfzyPq+@N&le$@v!b=`Hi}Gx-X4BL9ZU{BLG~4X!L+Es%5xpq06s1NT>5 z)W2*>Sf6Dp6N>29li)g5@!U^s-h=`|>3wfPf>@#QWho~0eId?x)*|1;vedmgjc;2Q zOmF?#I~-|f4lPryL?x`tIQ%g!U)Q@^jsT&E36aw8&{So-@WYcvLtH8rjh#Z*&Ed%D zHo605Y|bj&w-{XG;yCV2m*2EJWmmx2y(r6H;;*JM8e(8Yv{n|S1Rn0!;-E52^4{k^ z+?#y<`~wtrmd}Z*f+CB7!-H+M=e3TBWQp_UikO!OzBmz6#x%XSLXy!l75e8~6_Xl6>F_#!-2^@2GNo z#KoUdGl#zuCWBl)2C%6h!y4&W$rJ%yc|MTFyCPl|HXduznKMc`tMQEf%fF+ zpWBq1dD|<&yGIJjwF;p4?Ve*sJA-<^&&5_>QIhKjA%G3A`HG1%LBAsl3vse*2?&Wt z`C4h^xNvF&HRG`AD@kh&NjpUQ%#b5qIT*1ui$mx%u$B1{H8EpRdEe(;09LZ*&^qC{ zdnC$?CJuhOGh48U2yJAA+y~XM^JTe6UY^2b-7XLzC&IrEv)k(;vdK;_lQl@FL@;sUx$|g;BMGN-e z5h3Vqax&o-U5RrnC}GzG;03Og5$@5ATRYp&T>mdj)c?=YgTAHH$cqK*=v$G+tY|2$E_J5BV)F82S-WJ#Yo z!~_5**#_)aIp2T4)n6x|uDC4oq5-&#VEBFI>wv_jHx6RNbg zWD$u`b$FUrN|&1%AWle|)s82tE&@5axolaCg=!Q%dEd%QuzA?UW0OPIHOUR%{*m2& z+{1l>BpRmAd@yS9D$w%Llik&sAH!XGCT7|-1~Y@xA-cXELG&8MLb_AE6iDYh0vLh$o*+ z6d|4LS)J|n+UeOLk6-9w^I}s(=pU*SlVFNUNkTd9PDm|NR!gyIzVNRsH03FG-X40% z#pc{HFCdI=X%;#B{KC0Zj+h0);{j~gs4jol(no|@{lp#{B>24AAOw@BW@Bi)Hu!LMlPQ_`!ew!U~{3|JAmyh`zag<)wcA)2kO)T(@mO zTHwduEd9S5gywn#;B#A0=l6sBqF&_h#=VLnU$-$DMKch@4j{kDT2(8a(s*`Gt-fc+_s`$JmSh_^3`|3Lfz zeHX+Vd&R9t=zpT#zP9@Vbr4vZ^$+O$O(5+*k#FB`{eet~a2Mno^!_pW?K`DE(5ZnH zseexQ_07WT^>HoD+xHcJj8Bhzm+`Nt`yIyZJ9$4a3Q_KY@m)u6hA;k8WVi2f{Qz7; zy9?kAk^N7gw{H~v038QzO@A(_TU7qye$j0i-oC@~19=YXF37(i_Ycr--^2KU9(V69 z=-=tSdGh;D>E15M{sDN7cNf4L0{WfG>&nW%g!u#LcH!m^ zpo%*I-JtF!*zc=1e}LhW{3EJY+Pg?YQK>IcvV%DVvFpz?QMx677(fbCJ;1?=Y{rrQMFF2VVM5eRg2|J=s?D9E{u zaJy3C2ZAvDT@b$4P22|fIn94n-f-PAy>{;e@Ll-7^3$%4fPV*kRbO!3GQHM;PVb-d z?uIh_DfrI`>#GF+b<6ZxX1ojd4XS@~6MseU&zO?efWT*_7drD@F#m(#{{i>sOzTxR z?7C%oJp#U!DKgYg7^BwSiPAgueSg%{Amjv+Z zpX2{XFy2<vi01u9T4tYa#|1<2*d77KrS_Ne9pTpjw^gkT8Uy=MX_DyZAd~g@+Uy%Gq z_&=u#Zc4d^`!4w3X}{^k{fgwDA#X~Vk@qf;H%R`UVSkQzUj-MhTc%eY@asR2@{ic} z?FITX)V~5=|HjJnQsBD_)C~%M5BGDh_$oYp-7>u{?*#W7T>@98SF{({+Knz<;OwM_~1~On-*DDbpU{*MCUq&v1}XSIlDu{u9Im Lz7#{~>f8ST2qy9^ literal 0 HcmV?d00001 diff --git a/.yarn/cache/@types-negotiator-npm-0.6.1-bd102330ab-e39f985874.zip b/.yarn/cache/@types-negotiator-npm-0.6.1-bd102330ab-e39f985874.zip new file mode 100644 index 0000000000000000000000000000000000000000..619e6944cd577edb4f2204f886025bc9b555a947 GIT binary patch literal 2870 zcmai0c{tSDA0CX0$kJGbu|;IbG}iQ3vQw6^GZQfxyI~qr6teGAC~HK@CXm>^STmY2k#vH9RoMRtG|R0;h^UKf_ck;Gvi-h1;zt;Pke+#Bw#m=BKF*tqkd7wWF| z?LXSED%?^CcnAD&!ek96E_LNZKW90IPZ%}u!DiH*`>`GaK=yZFER#p|fQTu5x3)%b zWB+m(;Biu=&@?tmKtM@B{%p{6a$>N9w;yM>j!=ZR&y|9g)e|@cUBONYg(lfxHO+RU zn7<-WI1OpF1R@HB3HUByD=Yjnj682Y-p?iRruR!m`p{5WP!Rb68|5yS3Bf3o1svyd z7>g^_cv;VHm3wsUT?{n5@4)822P(k#RH>Tzdi6Q6&a3^Ruj~o(2Ad1VRj&1B#R&dW z!C35|7OnmWa=(fp0zDwE8qx zRE>R1kyF(CglbW85raE7<7h7oQ}v3E%X~F+8wqJDGJC-mTEt7fWnFaSVWUe#ep=m! z_xjBs=Tp{7d6m~zaxx|eu;U5`tA;^5GsA1e<O~aJ3Bk%ZxCopRg})+LlWBrWnBg0YUAeLR0xewmtq_W z@AaL5-Jg*$eT9x%dgPfo(^D|CkEy8`ZVQqrRc8f0lfw=$ONhNi-H~JG%)!(iD{Cbq zmoYWD*41sA4%|s42I*kGkHO@}4(86r8Io|FYr2N%T22P1;erqnWL>MKEL$*~Z%xgJ z=Bk>wxe{cYs@!pr+&^2@y_&mtknwsf1RI`F9^QxLU1v>|a}=v@$$p2rl-8Bpm9Soz zNi7eSi(O&lx6HAYXyq|Sc8eY*o?%+J+D5ze{Ap5p#Qj8`>uMPP)^~^z4e62~bzr&q z`QX-3S{@EAIg#J(xAV%!oEoByx3UO{6#$Ul`^r6i(XN3|G!*Y&ncjXi8^#^8l(N8X zI4KFT$tOWywG%F-RC|z$1&R`-See)X^XNGK0C4Wg7(>h@miWFW$iFD*Qw491=wvZ+yny}% zx9MU=q@rw=^Ir#9K}UoV;u1?YbR+&gJg{+no>tX%lJTo%AyEU4U)Q{8a(G!SqhMrz zFa}*mp5ls;76&epti3_PcR?^XEKh_!vneD3qmrL;r-&J20v3CpPw&>~#3-{L=Mw*9 zbeQv@mz(4{mZW5`z0rg-yooQ5-MhTLNKcq`HWMaR>1 z**e2)%aDTkZ9{YYEEH zw}=Yl!n>oDLey}$(Q8%EO^%|;c6_CGsn?e}xG}{KW}Z)TpdhXgjP2W#I>gWB zJb5Z*15Zz@r_HqAcIGe6i4GiXY>hTZn8~eq_8LM%Y&?5a>G-%V4TAsD@6%RyV}oy} zNA|Cjt7>m0fS4_>l-=7Su_zaBl)Ed`%iqs8#IoJ23C8(!NmeY+Vzj^)c}b^%j@`(J z8yXiWlKsrm%kYt|jm=8Hbiqjx(clUVwW+MPUs1d((cEw8k%k|sGm!H52urn-H&s5m zi3UejSdtnj=Y;QyLmP17kN^TEc=a@g9{s)|H1nH#FC|wu+~kf+4Nldm`x&Hqj}y?P zhmj(y)7|ClJ)asEG^7sN@T-9Ha*axh81CZADy9xe6G=#3|60?3O(B7^ydCdlKs8fv zC&Q`JGHXx*5$y3WtuDFN5Kgo3zztu_QXKbwQ1ce5skpBC1vDArL9VJ}nj9vn6>~(g zXsF|R9^Nny8$AG>yF7VcjzlbNP+w*V!@+xPDI7e9Ts;lIT6FD$uBU)qcKlf&cG*y# zsCgb^7OvD0_3RIf9iA5EYo_CsiW;SqwTmg-Ld&kb+tn){W!^XY1yrow#f>@Z|qI>Q#)-N zxXrn{T>aw2FzjjI|BBac*4-KT7whnr(%a+Mzw+~L+TCIGix$VUC++_SnYl6JU*Et? OTi>Cr7+wFak^cjNoR(Gq literal 0 HcmV?d00001 diff --git a/app/[page]/layout.tsx b/app/[lang]/[page]/layout.tsx similarity index 100% rename from app/[page]/layout.tsx rename to app/[lang]/[page]/layout.tsx diff --git a/app/[page]/opengraph-image.tsx b/app/[lang]/[page]/opengraph-image.tsx similarity index 100% rename from app/[page]/opengraph-image.tsx rename to app/[lang]/[page]/opengraph-image.tsx diff --git a/app/[page]/page.tsx b/app/[lang]/[page]/page.tsx similarity index 100% rename from app/[page]/page.tsx rename to app/[lang]/[page]/page.tsx diff --git a/app/error.tsx b/app/[lang]/error.tsx similarity index 100% rename from app/error.tsx rename to app/[lang]/error.tsx diff --git a/app/favicon.ico b/app/[lang]/favicon.ico similarity index 100% rename from app/favicon.ico rename to app/[lang]/favicon.ico diff --git a/app/globals.css b/app/[lang]/globals.css similarity index 100% rename from app/globals.css rename to app/[lang]/globals.css diff --git a/app/layout.tsx b/app/[lang]/layout.tsx similarity index 75% rename from app/layout.tsx rename to app/[lang]/layout.tsx index b5aebc472..7da8ca05d 100644 --- a/app/layout.tsx +++ b/app/[lang]/layout.tsx @@ -1,4 +1,5 @@ import Navbar from 'components/layout/navbar'; +import { i18n } from 'i18n-config'; import { Inter } from 'next/font/google'; import { ReactNode, Suspense } from 'react'; import './globals.css'; @@ -34,12 +35,22 @@ const inter = Inter({ variable: '--font-inter' }); -export default async function RootLayout({ children }: { children: ReactNode }) { +export async function generateStaticParams() { + return i18n.locales.map((locale) => ({ lang: locale })); +} + +export default async function RootLayout({ + children, + params +}: { + children: ReactNode; + params: { lang: string }; +}) { return ( - +
- +
{children}
diff --git a/app/opengraph-image.tsx b/app/[lang]/opengraph-image.tsx similarity index 100% rename from app/opengraph-image.tsx rename to app/[lang]/opengraph-image.tsx diff --git a/app/page.tsx b/app/[lang]/page.tsx similarity index 80% rename from app/page.tsx rename to app/[lang]/page.tsx index 213f04410..361f5f8d3 100644 --- a/app/page.tsx +++ b/app/[lang]/page.tsx @@ -2,6 +2,8 @@ import { Carousel } from 'components/carousel'; import { ThreeItemGrid } from 'components/grid/three-items'; import Footer from 'components/layout/footer'; import { LanguageControl } from 'components/layout/navbar/language-control'; +import type { Locale } from '../../i18n-config'; + import Image from 'next/image'; import Namemark from 'public/assets/images/namemark.png'; import { Suspense } from 'react'; @@ -15,11 +17,13 @@ export const metadata = { } }; -export default async function HomePage() { +export default async function HomePage({ params: { lang } }: { params: { lang: Locale } }) { + // const dictionary = await getDictionary(lang); + return ( <>
- +
+
- - - +
+ + +
); } diff --git a/components/grid/tile.tsx b/components/grid/tile.tsx index cf9aa49a9..9ec17e143 100644 --- a/components/grid/tile.tsx +++ b/components/grid/tile.tsx @@ -14,36 +14,21 @@ export function GridTileImage({ title: string; amount: string; currencyCode: string; - position?: 'bottom' | 'center'; }; } & React.ComponentProps) { return ( -
+
{props.src ? ( // eslint-disable-next-line jsx-a11y/alt-text -- `alt` is inherited from `props`, which is being enforced with TypeScript ) : null} {label ? ( -
); diff --git a/components/label.tsx b/components/label.tsx index 113afacb0..d94a89c37 100644 --- a/components/label.tsx +++ b/components/label.tsx @@ -4,24 +4,18 @@ import Price from './price'; const Label = ({ title, amount, - currencyCode, - position = 'bottom' + currencyCode }: { title: string; amount: string; currencyCode: string; - position?: 'bottom' | 'center'; }) => { return ( -
-
-

{title}

+
+
+

{title}

- +