From c8d0af5ea5a21d325f65adff1da6841d111d896c Mon Sep 17 00:00:00 2001 From: Angad Kambli <54415525+angad-k@users.noreply.github.com> Date: Fri, 24 Feb 2023 04:53:58 +0530 Subject: [PATCH] Add pseudolocalization tutorial (#5119) Co-authored-by: Hugo Locurcio --- .../i18n/img/pseudolocalization_settings.webp | Bin 0 -> 17790 bytes tutorials/i18n/index.rst | 1 + tutorials/i18n/pseudolocalization.rst | 85 ++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 tutorials/i18n/img/pseudolocalization_settings.webp create mode 100644 tutorials/i18n/pseudolocalization.rst diff --git a/tutorials/i18n/img/pseudolocalization_settings.webp b/tutorials/i18n/img/pseudolocalization_settings.webp new file mode 100644 index 0000000000000000000000000000000000000000..095d213ec2dd7709f9ff0da56c904dff7feaa4a1 GIT binary patch literal 17790 zcmY(nV~{9K*917WjXSn&+qP}nwr$(C?%1|%{UYJ^Z!0`!5^DE<=JD)PfLu;Ru zRgho8tn4@>4`enws)?67YOJdkGLjSNvxs?%wD2X4bq`rLfuM?u`9ANUuy<3t&Ufll zP;QY|oXffZStE?Px~hDPFDEx{il2K(b%u*ot)JPnWo!OQ%Whfjv>nLnrThPNgww-J z2(Ag*!+8c5E6Uwoa|JXvkuUPUZnb%QuF#qK7PU=zNm#Pnu9I(B)$IAL%GFloT2L)kml#zJd&g!igX%_z8DgGH_9JEMwJ{gw zCKK0Y)tW5liVi4`OVx;~wevO>jgggg*XVO~b*&bT5zBFkS_4xj)ac?Zdj(;9^LgIe zZfL&ECRjblxMTp zidO6Nrk&Mfuzz^_LmexZFgjD&*cLIJfx}`mu9Gt|43e>kLTp-w|sEjwYKI!;St@dsQ- zjzaQnJJFO|A*YQJth+l?xg>rWmI@}bAuZ#)eal=AWVym@>y74?5<0i!*4#A^X0sKx z>4#63x&m&i754DTrs1f%=UXa}SRxVY)HAc>#l*(KC{%S#1&WhJW~XEfN0y^hB25`5gNubq{X~WN zT&7OJ1y7%%hoxkySghSfdnct~(dh4bxovYrhJp$-X+|NO$pq>QZ;&L(;a#<3k|Gnu zxjok>HYZ~Rsn(gJKE4h1PiopXyY;4MqLG)Ju-y+yL(GvllGn@4ikQf8C&TH98t56Z zy~{pdhVwrDXCqLW7_00$7wry{RuzROdL@YS!AMv5l1zzhVzVNf<90do+&FdyDP_T7 z6}SDi3+laJQOpETEmjH;C&yfhr1cRI8Hjz{6)_wjsg#a)ozqjx#PliD%dHgm--gpw z3V`EBX%#V}x>H{VA_9W!yjweNd!Oo;OCd@oqp`oiQa2WBOKy9VS< zkvmesMhQMYDID!ud&d#kxW*)%TWh6G?Vrn20XpgcU4%6OupW8kn>e9^7e89cfCJGJ zrJlE|OxDlb^00&Trwg7D05v^MGwNG1DpqsdM?yFeD$uv8nc2$i9%HM)b-j?ouv;>IJwf+ zcaYiuAj+w%wvSgYU~`(eVJ+P-78Jy5B%F-xr1D>wpk(|+F2qCZo#~#y9kN|ygS)53 zK3wZN^l)iETsrUPj{8YjA#C5ZzBJtz&~(YdX?K1>HoQ_FpP9rF*iAnMfwqr|^cx^) z3x>$~$I8(9nLIDFE}=ygG4ugap8V@}L1BD@rzYY(uPuz4*LiShh=Rkh$M1{}ro^&zoJurk?K@HcIW*6>!O%H0r1jCH z3wf}H$@~dfh>J}Dzt&Ovxuy!^Uo zR{Y+kMhm~m@Jqaz$8A=_8cbD6=a7Jl)`+PWN2f~Uff8a6`7FKGnG=2%#^*A{ie5qF zi$g&`{N%InAYb`u(fIt%4Q?t<*THwpY+o}wP#zy*P&k`PFy2vB>~-H&Xam0zjgq{NHaI+)_fXtl2)8o5=8?99b7L`@CG7R6e9GlX4R7~LYM$) z|3te{144$~Va2r`T1LM^(~`#`x0k7LB#o%UGy`AUPnl zw4Y=jataL(ZbYD|SA0%n*3-GMiC_|eMMcZDaN165Yt;UEAQ}M4babt??(2TG0`Pxb zpLw_Fd%(sr-VP*R4~`cT>EO(c;A^Z~WNnSJ(%zPVYiq4igx~7c|0ZfSNb8U;B(%0x z-5Rq^Si4wHfP@NQQqA)PLm~l&&5h=79Z?3k#W2Cqk@jSs*>ZpJD@AFUWtAU+W#aY@ zwloMxOQ~ih6ip`43a_lzIVi62z09#&dj_W`Ia~md*SXl_RL3|N>?Uj1Yo+C!VOI*U zih0CJI2sgg)08Bo_dk<#8P#*m$yVZM@m@smD~p1Il!>kYUU!F~-q+sM-e0^MGV1ov z*S}Nf^*dK*sieggwXp0`e@+SoWICqMdZI;O@j`u^{=piRk?Tyq%#mnBiVw&@`mSBw z3*PR$5?&>Z8e)*3l?Kz~HQYue4)^|vwgNSs7z+TeRNjQ`q_Os!EQIlsf?qhzv3Aa6 zyy9IJv&CXeNdh<8QW;XSF`mWlJOcQZGoJ?(7&4DJ`U)c8ZIwl^5N4H@Y&6#nOq?So zY08v1RW6L7NyonYB6xs(y$LxOi5MLXb~Zj&(Px5lV9Aww=|9z7?h250RWBooQFD+#KOohROOw$M9|sm2g)?Wo8tebDUGx( zQSV2Pwd>febVb|o*gSkk%ObA9J|Z^KRdsPZfy}4+MiQ`Zu%^EOS6MU43uwzQn zhe_`rw<#oHMx3xYlf;}X+pgaBXRM;{&YNK+ejLqSz=jums3bw}l&0V?pNY|5yAz%^ zO%8fRRVaLlpU%Oue>EeawnjkBBYDk3OsSD&pSQeMG`F}{FNq4PCQ+Oog_IZ^%;c&x zamPL;Q(rl|5h+AIH_I1HN`*MNi3Z8{HweDt2)=?oKRqO+n0@#FBJm=Ki@*=z$NWiY zYJ}TJkl0jV5lMOcA;>+2=iEvoOcH6U64CfA>ga?sel?N%I4PC4Ihc{UyOZ1HKN+p( zHfkk|?ZET5m93MKDwNCa=B;uf(2T55O1>h#l~d$GLr!1>kc5Ris@bu&9CbtVXivIA zJoVkEW8-x(6&}LXRd$O@Xu`#Z1D{PM3l0GMwANF)3`4at>1Rx5azBIt>F9#atg1>X;pOMikvx^)h#VO{qm`!Ssp$H) z`2VL@3ISW>9KSUi90o`pL<2>O-~F7_#92z)K0Uq2WgPNi(xEYxAD-GS#96qwUIBJK z$_3}(8a}T=QDl?vJ}0>={!VtFt6oBUj7}(#tMXc!BRkNwxJptLL8Wf1yO}xzqm(&| zvPs-=WIiz$U>61MChp4xDS1rL73^qD&fGQ(igVsAUZ|% z4zV)+uX>0AbU1?lp?@k>y}0izG{LtfFc=_hAao@5|6iGykpi>?{GBwCs;a&VO}$U8 z5d2Ht2*bLV?v@wnH@x?ek3Ml4sAt#PG4XzUfPMZ z0@@CLp1Bb_O3+M&f0#XKNF+2CJySdUFalEI#2g~gu}NejzKN##$F~; zs?b_0Idk~OV%!sXCM7cQb6Dw9D!3Mfgtr179j#hF!My^YqA#Ja?6Vsc`fGzqPv%V? zr;=@A6yfEkv9o+Iip+*$%(b_uBg7U1M!i?=f)}p@O%tmsnIXZ~Q;H4+Z;Y_Z)s)VC zB~U$)YTP-31Aql|xVVE!b;6k|f;9*CU?PfBhZ&8`cOC`r=`i8zP5rWFtz=*UrCte9 zpH`d@$^77D9N!M>_o@^%$lLkJ0r{Bif{Urfm$>EcJL zODgxbYx*H^-o{8~C!J)FT5CA~&xbpcqdM(4TvWRL_Zrtx+xZEZz)=Jf_Fi5|vieS@COGkn6v(rvJ_ZI6nA=M3T5Z zdaQgHg->55tw4e@(i-cB+uKA(2F;8OIHBGpkX=)Age}9bNabqYsbJ7uW_o6cRWer0 ztNeD7RQX0aaC`jyKLk5e=Z0t(a??uqi=Y)G26M3}c}ga#)$` z_u<#K!sX%;EbYA$F33#yr{3Konp3}}J2ca>?;oa3ir{*XLVm`XSvy>0lS$EOx37J)rm7w)23RF-gt$FM&p#scHm zCM6J<$nGum*c5zO7I1EuTjTz{{U^|t{CeelTk(o()INx_z<;)jN2vSNRRLIcAzr}$ zrrPY(X`VVXzgMKadBu}mYF4(&Ir!4CzFu@|6O&FGy32Mp-EVE0LH*&OryY38h0xTI z``ldS!q)61gp@659ajyPEUN-~WV|v?{Xy84%pf@}#W1pV!O|u1QcSbeDpku}-? zBMW?!G3@JtaNeO9|NHIF5vkb9a5P8)5|!Y;cu_|CWmV4n=ZO!JkeGjoJ+ox2(J|~B zu9N-Sx-7tMv5q_}5oQ0lmbjD5hs9_!{M!yH#0o<8Q8F~B>SD_X60GzR-Q@D|i-!98 zEpMm$nxjo6Zp!uboDE%^3MHSa!MZ7%2^S!?<%tG+3YpzJ>yg)2eSYeK&aGnaU+$TO z9bal)xEZ%90A4^P$PG=Q=in_`dT5U46 zNxDv#b?0E;4^EbC6Y~=i!*7di=$V{cPYbBA9DH6SE=X*pv@$#&HSWYJP4I7Vkb2ln z)2c5V-J;e=;doGxwSV!>pnp>-gHD=oIVji573Weq*A$|2JiGGI(-dfvG5_5l0dJM2 zdz~mJn_@3p=6^4qh~fUbA_abym)1{M`$A76GYiMRTX;7Yo4UZmx4mNVEB1ltwPBTW zbs*%O=IQy27c8BZdc#Hul`55Jq)NUP8L#4Pfwwj^r4t^xOwNTteP#aPtD&TCmiTz? zCf@UYKMa7fF(s5hZgb$ z3wh2pf9;}b66^YnCHuCgv`Fw2ZNHxC{J!8rhYD7GUFJpjm~4ffV9v(H?8?5hS>nTk zr`kkh`}DAL1cruL4Nu0a;+$@~SI+;2@r{=VT9K+X_(}uHdmrUnlbQEb9rS{r{)m(e zjRE%2QutbozKRVvf6shwkmvY`i(wn(av`l(`3oDf zp0gGu5u_a8WuzHz@zjN540~ZKD)8wSeg6FXO!!v^J0Ii6)}2CoOpI(#$K0&}i6RYzak#1; zf+jgGFvGp@XiXI0;%InWOu7sU`s}*eHI?8)Y`*fDGgmD~83w&a>a@m?<_E&$WdbqT zYZv6nAYqb9UYP}!5Pql635Ie}$CGE-!oX1dRdlG`gR;#prdCyY0@9;XZ`iyEYIbUM zizUaCnPZKCv&1{m;z*Qo{#M`+@u@kwV!_j#l;#N3E(EL#dvh{c19xMgPESl5RBUx! zrdx|#OTpMwKkCM&>zfP3$)VupTrr3x-n8VCj;X2(n=aqxMRAJEiT|O$mG&M5E%~x_ zJq}W?uVE#i+eQg_%Ak*;*&ej`&A)Q5$F#Y>E^yvOPao8?*vSlZVY|8F`*buqEeRL_ zaj(yr8vF0{QERu?$n0>@wH$bR;JVUT(jIyn)laF(+)fCQcIEp#=%e11)r*|9VMUjT zH!#29G6V~cH8fQ+nC zo2)Z^)I3$2tJY7q7BXG_!`*yzKUM5G;Yh<{`Zde5FZ}~}0`7Kr-aa$Sw>lEFPbFqV z&MVEI?bvO5X}GV%ZA-|FWXCJxM+N4x^nIdydgrjrD0_>tyEy!&q^nmS%Ktgwf)_@& zGYonW1h(X3#pkb14Qg|s?-^%84%Z_H6>A&D=akbUd`ClLVqh?D}4iugx? zvQM>;;=Hjj(Sjy2-c%^?%imNY92=XkY?`h$`iCbm6PDZ>a)ONkuamA$zpSpqS&2J0d``qewhExpz{4)Ao zw`{^vdW~kO)P`1xl}Gv*CsIjLR$$0A{>W_O^nacI=odo3*S|tUHzeG zL~v1zHjA#~o?2#6wwFh69BvFiN-sH>MzGElD-~G~)F}iuJL8sV>3y(R|5QKKQ-a># zM`=G07dAumLQq;W2LCwi=%Qw)XbhRNt``xNnIQj34F`O^LgLzuLS{rBq+S!qYtZxX zg9{7?>^$+|=O?y#coU2Bs`QI#==_BCiz6fji}9YO@|(z@-*KqoD=^_a=$Cu@t7s@W zZXKLQO?2zAWw&EYwmyD#+xDlYKDv+0m8^;Qq0@)v3QYX-*{eq)#=7ryitYS zr*ewEU`VITRaGWX)Shkau0A3Lu;<`*<9$g(_LA6)PE?+kzZaG4I=ip_6pp`Qpezno zqw9#uyOPD!dRThT$^Y;!{&)36ob_1E;J;l{5jV)XvBQ6?A8CHcH-~HEmb?VCB*8@ z3`Wy+1+=3U8M_xlV50r6y027iEtd<~TCw_&ShS(N~lX+07?#Jiy^t_SD2 zkU`{{T`#|Sw7Af;^H@4#LHBK=i-n{cEFHsloUvt6{4PHYyu z(G}H&pQ_KqqXeI?YAXiy_&VH8D3))Q{-x4?rOs$ZE9xF?TA?4U0^FkuPeiCfs-C)D zGbqXX>4X=DL;Qg@$L0FAxM~V_tJZ1*zMx=0g32S0vTT?wC7l(aI;Bs-f2SW?KxX9C zS*nd`6g{4tT^To{?piTvMidfOJ3(PFL(GJ!(!12lV8n{lp0wO3(fCk#Pf?j*7kutb zvG{WgNM>Y~LkLF)RP}@KyshK_7T8q~diR_DhT{q;wCxoWS*>XNZDXXchLM7-1~{y@+KF3;WC%NtsVNnM}pej+31tvke_xdqh7iK z4hzlXBiz?2TB1H={)l2HirNzbbar9=9j%0J2jy z39Lhu9<02%8k59fxX$cyVG)BdooC<6n;<{F?QCoR;e}3&EKEP_zvSYnrA>*R8M6pM zkGgP6^!@f-6YE{kUU;9;fNNk}P#5i{VEEVDp%~wLK5bCn!ztfO@^GQ|qGYz5F6C0A z#%bZ>))EY2?MZ#!dokDYIwyVM0H@J|*C2!i_?dV_jcxV=6>0mLea_VLh-m}3na zy~)5P4*U0VNE$03wME#UV0!SE2@VdLx*OkUAiz6a;{2}{F9!$%((mVTA4T7$M2wS! z!G}o*0g#NB(#Rj{yM!de;QRd-B02Q7nT19gQaA~A2dUh z_*EmOSc>iKhO!A{Ruh{QbC^LcnG2p@ev z=fRYOICJ5zFz6<4g78fy+|mBWQilB0wn&8?&CGzqg-X%Jo9vX+csA9UQ=~=sWzNy` zhDK^i{bvKXv$j?W6JokS1Rg74h4C;vx2`_UnWHQ0X1glT(o_7_d6uP&h@`h$;pP0W z*eXSF2jm`S#kLl!rzGbs_{aMCg^;SG7x~TDuz9)p>3}77lg_(`P5n0KzcU^6w^-A> zFGo?atH}g+FR4=~XD=urUV2)u&IK(aNyZm&q<}Re|zbDd>|hBgCVGil>zF? z%HDNP9xCM@gH`%UO(<6Z6Z5pqkMB;cjA|4cczyX0;Y_)OuV57K{8o0?;0dKx#Zet)l z$Ow9DbwWj}{nKRap){mkYEcm8Y#HU!waP-kMuG+~`yz>w17Le{EjW6hdLp?^iBXh* zaViT(f*5c6XL@rr}qEP?J^Jft{9@`bOEA=!r|SD?NK zVuR!1eo*a9Pw=(m1^tCB4FerfA>faaUhE!m$F)ivxIn=q53ne4y!#Jl@yxc!)TOhO z^ImYj$0_G4m=?zUs7Ec3VJ|<4g-NG=1D2)2U5b-$tM55=yZR3pdx6;HSS%Q<=|qrnw$yjN}>$`nz7F&nf5=x&qn-Y={DU1=|5zw;HI zNnvRB2GCuH{+TE;e7_r62`^+e8YRFqcqx<@Zes{Ep2SqHv+^!H?Y70SL$zL8jse3_ zi$8cdYv`-dA0WSN05fwV&EQ#+Mm?`xn%R;3W-C`c-l3lpM7V3KW4a|b8H_9E{AT8iKKZ2chORuGY4mhx|5s@KvWHi5ORxm#4S;YdK z`Zh?yLr63F@)~I1OMDdCdNsw z&rE~B!qasbqsSaUO@tW(rA(7zE8N^t(NhGoHnz_E32F61Y4qS7cw!)0K;VL#oFuWh zu6NY0blEuNTqwy=#-LTp_$6~s&$ou}VST8}ge9tC--!sp?1)D{P5V*Ehcs)7l5D`` zDqRToF5j@vq7L)Hie`2ip1UoUVNE6sxOsTm`bc(Jb9rJYJjIIBMO>?vjZx+&>cD2R zUj2?UFr^i;ER#KZ(5<@b6NuCqeONT%Nwn+iAD}zxn6eSY$Ub6CiS!aD8=stQP0@;^ z^CG9=qir_EzyR{a(g>`bp4yMC5Qye<1oM2CstHFMtm(`tUdnn9-OM&(x&@ug6pvn4xG6_y z#9wo~F1K^Xfy|*mlQokr9um+2CD5qJ^<*J%0!ubzP{hhk1SAjdk5FIWGYAF49vDEOtW3kdI=mkcY9?s<*H}0XEuFb)|1Ty;%?@h4E%e}h<1H3cfC;u$0u*ATQ5>6g zya4=97M7(m@H9}-ZtkYG!UA^n15459HGmY9CfRSZLdAz7SYZmv6YL!aIeQ4 z8h$0q|7e;hpZny^?N3A`y749g8)5!u0LzjKrc}mOwZ1%OT}3&><|@>_E=! zpi6i=gVBD?hD$7MTX(9=Y4nIv+Dw#~EyP`N~xG2Cb1*Qaym9sEn&kB1EKxcb@jfWmE zU%c+c-&{IQA<)yh2@qqpVmixQnMSOhP6?blfj?pVIOF1uGT^}eX{(-c-5m%gh#1-) zU;sad5&dHwEPvModf7YXa7EI(!ETg1h}dPAz@L(ciMXm?hLCg4A}+7_6L$GK`<<+z z;8+X^=tv1y!hj)VyF!5Yf5M9(ibnzvaY+z!f^9#8;?qO|P?FtQcl*^Z1N4w*R`ETB zU?!`M^J|^Di5yOX2Oci#o0FYeaaPogz)>~`dieJax+eh7REqtP$!Piy1O75iI0Ysd z@>7HbiNx%}E5pWD(v~Zi3*^8gq#=DZNnIj@sgF6hTiIdg#G_;P@8hY#9X|yDl!har z&iPt;t^+}iQmOjlJ7?I$E0uNbD*j6}`xrCv>nk#wfChILst6Ao*%VaHJH09>tw0JKUsHR6cKkd6ki@Od3K^W`cIBLUe{8nu{wz>4Bn|3 z^o?6M)j$@9iF(K0DRNQ*rH(yBKFI9iw>#bn1d*)_5UCfl#!|I3VOZc;7Y2@M#Bn(v zO`8Y*=4#l~R0RbD@XhIya7ySdq`N_&JJMZYWW1A=qs)tWW2;663TT@&CJFL?MwtK? z%WA-}R7_5t!axy%BPXEB=Q2t|N^?#jZI|U8Vt+ACSB^4o=8FYQO)8JVJy-di)k#wA zWAe7gfBjG}8{5FJ@suyX#!)_x=-QtVJ2V{JMq)eK%G93Y%Am1PC1v8TU=nJ^9qg= zpU(b%d_MyP6tw_d1F@2(^LJxD$uxF)_@7Zlyha8k4SF&koBW4_A*HE0i7gW8XbzuM z#x9SD9a%=k;@tHRL{^ZJCO(eKl1u#4z1nTW1Ty_*(Rik*2@;*VuDExF%s;LCLCS_C zdJYozn2z?3v@kPGAVwxKZj1R2jgodRC78aVTX;&jKI=GAtIU+~C3NZZ|K3~aDG~wt z=r}pjNY@Qmw)S4Ac17B>Mzq;#B2^3FOp!;d?e=-(;|zg~Fl0gQ@L}1#*dPi@Qi)BV z)c)5BQHG%=u!b&o#JTgUT-Bj%y%C^Imo}!@TP#!5g@F8yBHle_QquLg$Rim$`x`X$ zB&=eJ;y~E+Wu3`*XSHn^Hul(7h(T+fNMt?uXcQI7zU2RS9DYzs2N__#-}57jBuEj> zW5Pp<<>qwkm^SxfLppKlD-%|r%d4}LEIB(}Is!!|4a`A4_Ha*;#bb`p`6S(Xrmcgx z@bAJ~1OwSJ|7ji*@ykZ!59fjQEf!$1I;;UzLYs?E)wbPA_x(9R6q}}GFWuT%ilrrI z>2JetFrbxDKd&K~U|P$nZc}Mi0-A{( z-#W`W$_BQM0CNOwpu;d1w{AvZ|6;8;1t)i&Xt|!*ok_@O<6{MDFxMxm%a%YzAz$IYn;W(rQ&EmWHD91Os?GR_i((9c&LH)kZ+X;fhnlp z!zHZwu$~5rhYwxaK41=Mc*lM_u^ad1lSpIaKPn=>#E1+;{_+2iAbedP0g2=f+_PSz zF{~l~`Lk8nWP}n!3J0>|_U#z1xKb!jH$XDv)C(H{ucVR0jbKE5?yPXVNcHy{*U!A% zvbA5u_d>xkO%G1*s?{CPAkO?~D{XHdF!i#HZhB#p7OaXJq9Jh{AqWc0w?s1dM_jB> zVre2QEXgjgylGCD8~gQU#}uZp#IyBGCM{SICoC?{5>fAgBmZXv-pGmgw z!n5x|SSQXPmzV@h=pz!~^Mf6QjZQ5!XQ%U@$JU#&$}6~iJ_S~%slZf%ASkqRf1W z9krv#B~l-DcjGQ20i1)ljKy}VP&v1)tUfp-HkDnv8K2?ctN=^>7fBcp(5yFmo^;;wa}3KVIQNRH|t;f-c; zI2bXlbBd8^jgNq$)LIrl()rrZ+;7?6kAq{CTpLU1mri}cC6rTJ1XK|52J%w{{?}9 zMvN?wNm|gTdhP830G2*1par3;>CO}Va->v%UdTE0UOM?)7IL_RRDfNVN?vW0QhrJR zaXlEpL5E(XIb*DHeLi9jCTVU9V;;Ludf^X$^ve;mpe8vjO9U}6fZvd6K0HD~%*l%V zJskOl^wC~;QId>odhiJHeWf4;g06o4mbp;(dvVBsV$xVA2MP@&Lo5(6(D80b(r@)9(@C&$E432B3UG3k+3!*^rTJO~OJy`u0h6{sHxMerL? zwJ+REX9zy}Rt^?g&>2jViax)j2q~FBd*SSApvjw}Aaq;S%#Hj>YTQj-$~0q%J~m*0 zxh>bXREp7z#ED+69(wBU7LG6ac|}QL^C4a#8jpB zVFzhd!uY3TBw~4L;)u_fiSfxTKi$_0BwaG$Ssj*5JS$~9uYEDm8F;w32pL{=`epXJ zvC6i$^(za!4}PmPG6u_g8*7|SswcS1ysj^1A!$*^Fx1R2@`|5ncu~a>d|iM6^K2++ znepR|4hdRvxZV=J&9+K&x2UT{E{0Pr2Bb9?de^3Fm4RoQgp(WD2||iki93hHE&dNm zQi3eEI#pgx6s&-N8XQmO*X9qw0pHEQYEMlCJ)}zT4`bVTx&G!soaH%pxhYCaw{M-a zhX0(f0>SnVkiM*21l+7Jyn)0Nik#gz4l($!aWOLdilk6j6)0%UwLRiT$73Uk-b-ug z0C6%6oS43KmYL)TW6bEgqB z2EKM@(-(CJL)`ZAGY-zFI)aY=&qUJ$t^>hqZB*`|ZNnWo{{d{b;EygY>L5Yi_6htZRPBEWJ@@;qgpWYcV8dfV*fa^b zz^h|#J{Jh7-^5h@CT0lMG%?DHwmv{smi@A(%edu_kMcjp+eaj8zOb^z9)bUZDGbeb z7fGG1OBahPfM_54*;z^`iCqlp%`GhC{&ad&MVTP8(OKNeDsCo2^~U$Grh?p3Qjbam z=vq`ey_rAH($YOSF#8AaD-F)?cp-JILnvMnf0x|1? zJHX!QULTgs6uS$4N~HJK%j|7iJfw5&T1FZoTf#A|J&4J}K%%Pw%(v$z4BJ<@AVK8q zW%jEp+-wF$=*i6V0cT?%ZV~_i+6rD+3y(9mfCaCz$>p)%88L5V%^|AX9K>>$cJYmo?uHDoz0JI@v~+5g1^Hn3zx^{dtXD+IM%h zQaRjllmmas07;kjf{dTf zKWQ(P@>*!4OPLlj$3vg5oh?2k3$Kqz!J$yVbby%zN7`2MrJ~aVeWZt_oGZ+W*d!yV za8m%WK5FRWPr7nW=Z+^|tW39#XGXXvPWEraMFE&ns5(tp3x)trShRDPcv8O-8b3DiU=dmqsF}S{Eok@v$Le ze%xqLl&phYFUJtd2SE+HX)z%WuXcA0YR4)SNYd?du(R`2za%dtuQOkR2$=M53lg;@ z37?anj>N1)QzTz3%OLRR3aE3Cg{;x zQfwOw#j9G@(4<3-_4l9Sehj_({p0+HAVQo8r z*rb{d4dumDi?j}b$lwmPWX~rVWmzK9e!Fk~6iGC4wC_svq0 z6p+2PbSBGAX5jj*V=QpK9I5xYgwq*vkGsCGa8zzi^nChTwigzq>*_(U1%hK-rZQs^OWtuL4;;adb z(OzCnAPt_^_DsxtgD&ai0lLO|MKGw-(hr%ASCOwZIwh7=xnw5$Po_*mo2SUXorp5a z#Pk56uQ2;;io!}P6yhDqhp>ThUaj>OkX3I-ggeHOETZRr0cqXJ?EusA+5gv78NB{L&usGtGcTG zBQGU0#Tgi;H51XGuTr~WzPjCQPCpRUhd~S@CQpnpJuQT#i}w=lsnu3oW9D|6%e%Zk zjea&A2vhdXjd>n6*oRC8G!|h$#Ry+kvk*V!HclwtPQhysp5~s2u~$-EUgg$K zpKS<0MYh1aLB6cmR%>-d)Sp-@UiI)rL1>WwZIq^b79lcM!~Pxg8{ln=0c?am$P+{r z_}K_B%6k7Qq(`cF&6^k<>Tb=D{8rctJObL?=QGILoc{CK{b#weEAh+9N-r8m-pznm z@t!XwF2cixDdiJ6;Pwu$WcFGQ9QYc?K;UQ^5E(;Q*nqgVpi@dtJ-+4XFLi+$8kKY)giQf9jXC&wmo1uq)`MLEtOdEgIF*M+h1lwrn|klus6tY3Vmq@@RFK9w-ZT6L_%{BWV8QsES!*ou}ne}a?6|E*nJBIiBB zV$v*C(X@c2Q<5*NSSfY+E)TC%=i-z_Cd#TQ>8p;N+Y=S8*{s zGYgzFk1q%eHeCjE%n`U_8jn3$Ap=y94ODOls9ZeiZC{Y<`C|LAws1?jwqXWo@H(-D&I}E zCUM`Iw#-0QK~a*id)h1BBcfY$eG{!5oHiY(aQmxK2(;KrW7dM)m;TFd6lL!G8M`|8 zQhTX zmoP6||LE+?zpZOy>u$-s+jN?TC)DMniV)M~@Q-Qte@y)HtFW1+;AQS?2i~o-+f+Eb z@?PFP_s?zf>e4x_H_hu*xM$xhdvG?}`sF+41uSbXp40mucYbx4PyEr@wU6D4J^(dx zEA3m}-XpdBtpP*8#RCVl?pg8KPipqhzuh`HtTyG!4&A*M_IGW6@ehNIuUJ1*MVa#*ud&L(TBmjqi?mPkf%{;^j?`M6 zoy;UJG5ciwGpi{EZXt&*A1#ZBy0#E4?5*|Pv#M+>?OkDv%f5Tt*a8Hsj>UC>7&kW-%pqBa&d-BJd+B}Ut=iH>=S|<;yj=F6GVGtqp}S9{ wULHBB)>_K>V@ghf`_. + +Enabling and configuring pseudolocalization +------------------------------------------- + +Enabling pseudolocalization and the configurations related to it is as simple as +toggling a checkbox in the project settings. These settings can be found in +**Project → Project Settings → General → Internationalization → Pseudolocalization** +after enabling the **Advanced** toggle in the project settings dialog: + +.. image:: img/pseudolocalization_settings.webp + +Pseudolocalization can also be :ref:`toggled at runtime from a script `. + +Pseudolocalization configurations +--------------------------------- + +Pseudolocalization in Godot can be set up according to the specific use case of the +project. Here are the pseudolocalization properties that can be configured through +project settings: + +- ``replace_with_accents``: Replaces all characters in the string with their accented + variants. *"The quick brown fox jumped over the lazy dog"* will be converted to + *"Ŧh̀é q́üíćḱ ḅŕôŵή f́ôx́ ǰüm̀ṕéd́ ôṽéŕ ŧh̀é łáźý d́ôǵ"* when this setting is enabled. + This can be used to spot untranslated strings that won't have accents, + but is also useful to check for missing glyphs in the font(s) used by the project. +- ``double_vowels``: Doubles all the vowels in the string. It is a good approximation + to simulate expansion of text during localization. + This can be used to check for text that would overflow its container + (such as buttons). +- ``fake_bidi``: Fake bidirectional text (simulates right-to-left text). This is useful to + simulate right-to-left writing systems to check for potential layout issues that would occur in languages using right-to-left scripts. +- ``override``: Replaces all the characters in the string with an asterisk (``*``). This is useful for + quickly finding text that isn't being localized. +- ``expansion_ratio``: Can be used in cases where doubling the vowels isn't a sufficient + approximation. This setting pads the string with underscores (``_``) and expands it by the given ratio. + An expansion ratio of ``0.3`` is sufficient for most practical cases; it will increase + the length of the string by 30%. +- ``prefix`` and ``suffix``: These properties can be used to specify a prefix and suffix to wrap + the text in. +- ``skip_placeholders``: Skips placeholders for string formatting like ``%s`` and ``%f``. + This is useful to identify places where more arguments are required for the formatted + string to display correctly. + +All of these properties can be toggled as needed according to the project's use case. + +.. _doc_pseudolocalization_runtime: + +Configuring pseudolocalization at runtime +----------------------------------------- + +Pseudolocalization can be toggled at runtime using the +:ref:`pseudolocalization_enabled` property +in TranslationServer. +However, if runtime configuration of pseudolocalization properties is required, +they can be directly configured using +:ref:`ProjectSettings.set_setting(property, value) ` +and then calling +:ref:`TranslationServer.reload_pseudolocalization() ` +which reparses the pseudolocalization properties and reloads the pseudolocalization. +The following code snippet shall turn on ``replace_with_accents`` and ``double_vowels`` properties +and then call ``reload_pseudolocalization()`` for the changes to get reflected:: + + ProjectSettings.set_setting("internationalization/pseudolocalization/replace_with_accents", true) + ProjectSettings.set_setting("internationalization/pseudolocalization/double_vowels", true) + TranslationServer.reload_pseudolocalization()