From f7596505eb97aa68e1ced5b43c684d60cf9ed2d4 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Tue, 8 Oct 2024 07:08:43 +0200 Subject: [PATCH 01/98] Update screenshot MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous version of the screenshot showed a much older plugin version. Update it to show the same program – the code for a paddle in Pong – but in the new split view with the 2D canvas above it. This will be used on the Godot asset library, though updating it is (currently) a manual process. --- docs/screenshots/pong-paddle-blocks.webp | Bin 44972 -> 281598 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/screenshots/pong-paddle-blocks.webp b/docs/screenshots/pong-paddle-blocks.webp index 1643fe7f19e9fdbf1b70023ab5ad2d3c68432b4c..b5520539525a3ccb2bc50781ddb53acac8cd3cb4 100644 GIT binary patch literal 281598 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

(&=(dpqClhl&0c zu9)E7aCy z5)C5KNToLd3mspcrb>3m^PPHl^xY|>3Sr<5yr=F91Hn;B+ zx}UwuSNd0Yiw5=e5*#R8ANFEpS;<=W7J5f7-a0E0wN>ppXdfK=#B-P+$WyahxEq53SpJQ}F9~6#re5Am>tI(kg<3--k(TQ2UbxET?{M$<3cBl+wE$IS1VAb%{ zN8yeX+g)Rugq`MM2vK1HY)0YwlK_Metgo}-lL5%_d7~Q9q5$SdaZNJvzT{yu> zx#2sUSf9L{hs?se^WJHUVJ^j(|7mZ>vz!dI)ym|CaIHsE79mX7XQ9Cmcii<8*Q6+2C_~E*>_q|aK{O9j0}KOlv{HS zF#J5;pNk{d6b*YcL$Kz4oiY_X4S?^TY^4~JmYl@!%-TEHN1w|6s_~v{vE!gyA|<5A zG_8EH3Fho#YQ(%l+PoO`o7Yb~_jNObpUa>QJ?~t3DYtslh8GQ56xYJ+Qld8d@)DN+ z`hqSBT!+m?eZyyxf->xnP)<4UXj>(LNMX+`{^Mcd1Z9G`);iIJi+0l^yPOPZ30Z06 zXbxlc@1f+m#+S$mKvF7F7eH<0XUlAB0G`n5pMArhWk1t$-ycwZfLE6R+TVrO_*9nF zzq7Ck4aS|aG)bLos|Ur*O(Tgz7!GI(VsFR77lzUrOo~oH=qLLepr!T$x-_tC=D(se zW1hcG!87%#HIqqb!&~m7x3+Ty;pK|jn)?IiJDT}Hl5o&0!M-1bYZB}Mzns0`$u|YJ!E|8>!8^#5GU_eTW31BjRz7~Ab0Ynm_YZz3 zeJ@!uksm$a(vcA-@D0@!2#;k?<>-v++;Y2?gsKw)RzJP)(pPy;Q0_4A@{x0qTLah^ z7y7fa8$6M9N?(mn%y`<#4Zbn?wX#88N`9r-&(QE-q$Vi`HXrK~;N`dgy&A}lLf8!= z17nt-B(c0nANa30lcZp}9TDA?>ClqF=m-2jm6Hir6haM=U3RW+8aCrjn9JL}FRUQO zv~1V=_!b=M1UduOa79vRQRmq!REw)KRjbb2YB=IL`qUUj(9oN#dK>gB2g9@oNz89LV+xJSf;DC5G~2*a^Dm+=RGqB7CRJ??MXl3D-2cZ##6SPg zxI~KLuO?wgUQc@cG;n;r8z!!zEeb1B;u4Q<5a71yI<@jPsGfP`;c@47Y!3bVZAD`u z{RtXdC=1w-g}l@s!qoZj3nYkV4}Ew4gsKG%Luxsw4u0-Xdlt?KXg>ZE`eE0(a8Ed; zrFDPt~1PI6B0yV0bY>+$QJ)&W*Z#_-ND|8vjMh+&x-fg z$uYupc{mLsUAp>ySo&AZt=YPbMisQwxVa-uks@jn5S{S<($xD_lWv={VqdJDcy>Oq zana#XvszTdPXs|hG{sML@q+wQEyy)D&gTs?@-UX+n@A)v9%P*w^2m21`T0%-Kq0A` zh%O<^-XJlO8BCf=3;P2==^>gxEX##{gUEm)Q?jtGDrJ!=O$ghEIF8?40d|%#p=yGW z!^)F!B%Cmem?J|_LQ{}NS?zS{=>=U|b4Af2a*GI=3X-c>J*j%LmgQ5fl#{94QcE0S z^d7M5{xDZ&K}(dP$5iaPw=AWh{^H;Sv9pkaA5%R}wn~!(MXQ6IeNBVuJaG$#LcRao z>_aM0%qW^zgmG;@>(mX4C${OE^%F2-9jh4>Zr+CH0VU#e%<7ZVZEuC1TpnCIADgJnFBfzwqt)G!Z zA7SD83MhhJ&k@Y7+9)F6KW|qb4OM)fgF6*h9sjkiPz^Jrpqz;1m`;J2wj>h=H%7V| zmXP5}dQd>+q%<#`jG&D>L?N}nxz7%wQ30IALw#U;Sz+^rVII6iY3XHcS`{QI zO--@+$rYx8gp$7Mv|6Zfj;*5Z!+H3nS8vG=f9N|$K_ z9%u}3PE;3np*r5^J&@Nvx`jclL9PG>r#aFa(E-RraCRjFxo`@DXqZqMB?_=DaJ{9B~Su%PXgZ=MoVx_#k-| z5+?_A7MmQ9{!)JIr~$>#F{k-ps0&_PeNJ&UjD+G3GJ(t0M&kP5xSK?M`hb9<-=@?uC2Fc;zpY$R|UR0CH+XWTucC9 zRu)ycc&nXe7T^;Ev5%{YR60hGwL&*ya?Xlu+8V|;F!1+*o^)=Q(c7!Ww1Y=1h8pib z^^o@unP4AuDXzT$e$zdqF%R!bn=gC8S^~f1&;=$nT0itr=YXx$dOBe0sv>+{OfkQm z&iI-+`>C4P+<6>d0CD%bZaq!A-nB%Z21IPv-#wrO%LX~+U9{aqv*H8FWHh+8?fsafOOZPk7hk z=^&q*h4!AoU0scE<}t_kdp;(RS^+XN7k4-hPI}=W#aRZ+6rNMo-5|le3@u`;+ZS*c z6}NjC!OYrRV7&Ub`5XqYW}5N>RS0Xz&fYDh#Y0=jLdp=y_NjjFgHG>i4pYjagi1x?4MS}FpT#=-zM8mNdBuSP1~e-1 z%Yk|rmN_jIfk`h=(q727<}U>EexeK7r+eBPgg1cmL|iETgstF{2ZAO!nB7D{@|3nN zZwQeT$QJ?H!-7^rRIq5Vy}I}3ghV8;+*@WR&(qTz?R2rAa)6fGA~~g1a~TT^5K_E&zWdnO$~ znm=Eu&V%9{RPEZO7U@C@o#(gL`A-|{Q#f(f`anzLu|6;W0 zaV1qYxn_zaNY6_BOQz{wGeI0gp^6_7dWI3 zP|K$Ht5};fq{~ON;-3NoJu|3VC3k{Fe{i63A*hUyQyNa&5F01^QuvMvs zK{pK_O%aMN=?)TBI3GCb3f+F|oDL0TV~I#Kg^WBuar_|bwSCnix-aR6Tlw1;MzjLVfeWR|txB^(P0l ztmO~&FTMJ|=AaI4hD)i0+ji34aHm87rGsQuI?>8q9`DNed45qiUM@D?sec#}y}Pjs zQaG9yXnVbJ%(kEXTT_kn?5EC4jbF#wGxP~x(HqNn!UPbjLxp>Q8Cm;2n*SSP3WL8$Nb;KjI0dbow*w^t8f#Qx@IM<<4U_MxW?eHLy5H?*rc-%bH;3PCd z>Y+uGltb0)_w9SQ!(yo5d!sf}LGr;b2Bu zD`O0rRY~DU9b)#%?4MU{W40R{Gw%SsTztx86gQF-Fy4)g!Jbm@wLjeTyy-&ALjA1~ zSH{foSv(*OiNvJgPr9}hNz4Sc32G2Y+WDUF<6TRkdNG9e7|`c3FeyV|tUdTX@z^oq z>2`Y@@-w8$x0(C6bTn6{VSrN()YVbCJ8exec6F+<;_buj`sJJR!pBj zFquQG5jyQl(KbhqTWekY#$er~B|(GGyOPVsLE!LgD7aTQu*5hd#(jMiM;dA`^w0r+ zTt-pw#PSaafaY&V)|9SrX?g4b6}Y%Tn4wF$-V3M`GJn?E61_<4pzl6Qz5f^tc9*CA zDW_y>rSO-%7e(VlsUo?0VAtnryWQh@D{~f&NrrSl$eyiF1j+HU5mLywvz}+6-SNFa z<1lYyIOZ2?M4u?Sam#{qJv%Mk29v@t&;61~uN5mSVvc$JOY8exI9Q{ro5Y;zHFtsa z4KQLIbK*QkM@pr1Nje`DMgJkBs%Wwxxmulv7-fc{7_ z&6Jr_zHVx08bjC!Z{L}{ngsLL+C$-P4vo%K$6tQjw}B+?n5t3PWA#u@Y`c8v4@X} zSzPYf1!4=}bZn&ZN1ii?uAAfqesZrG9og#o z-~|mW^zmm*Nw|s7TU&9co#vZuq>8U=10LC5rcUo^zD8kY4Mm%p!E%+WPbF^VUfg+Z zSo(am~Ty?fHfm4t5h42xK#Z>5}Y(7Lo}J{2G{iOjxS@LYU{&RL;IEF+a0)NFC||R8r!?YU`~K31I25*!T7^V8rgy z{MCB(0I0uoptmJJgisGOF9C>~G{&~TPROa>jGLp$8GlR<7S}VMp8+nSOtkF{26)S>IercF)&C$8CZ0uW>Tkvc%UoSj zpi@+jj`$F8DyIKq87ANRM~UOjDWf>bbbE$_4vk^crgqMDNGfLug>3s4DJTH{Q|x;2 z+tcf#^VkcJHBb2zs?j?-zmZZztHzbeT)t@&mM64%L3U(>(UG{uSUpP|#W#q3DbZ?a z@sjZrRx}X;VFz-Y=b6wawcpnZpuf$jR4%>dLzwyT0OEHW@Lllt22sj(655@^8!Z|Q z1tx*Ww#-yU!x=6*E6Gb@)1Jd&Hsar0Rjo`f_~~o!5D362;-6n)U|0DyIDW11hF0~N zOiAaOZoQITs`g)LQYi9XNjs&`YU77;J_d&+ju9&9ZBLC6Dn`FtI7hwBo;!oa-c245 zj}{T}mmI?|De~q_K?ZAeANis`U8KqUO|hz$n5{wcc&^g&vr#k|-r2`ls2q{alpB7{ zEEUg4o(4;i!pS9#;rSkE4vi$65eizMUh%FctRyMKyrmS?d#0&sMLJ%$GcJmgMbR(X z-`heyz9OCAo;+Icn$^v8coC3k}(WX;4h8@=?x&{Hdf?cz)&_BIVeg@sf~lN9ok) z<6YE%wrP7#G-v%j%O`!?`ZOGfHfQm@Y{VbOK41Gc;-ZC8QK$rI%g9-I1O?&TrzUj5kDut><3RHsnUGWSavy!u8CmGf z2+(fPr$gfC9+zZi{bmIo6uR@LCF}QHDHs;d!sm)bAI5I9u`~UBE2cSb3A%lX%57$nR%M90Uw$kXkQ`CYK%Z3 z1&_--U$E%RxzY$eifTv0Sz=*Y?nHcKK)(#+-8bqYd~d<65_HWeY91Lo)jB0Mj-s zOjPiX@1b<%D|5&U;b#kr9g77`M17ctXfVJJZ^+nzx=;o^S|&p%M|QbztCHca#UzN% z)QFWE{&ua$c&+BeMQ7j3{67X~C_&;s>*i&DQz>@wHq7IOp&aO#@=th;UZ zmo}!UmP9iAQgOd?!~1vkIRRY^N{Puy&eN74j>x92j#k!Z!<+h`S^p++!AVKgbeMUT zVw_1PowQ6YQn`O_dceHVjW0`moV3CUyaFTe3huRMymO8(a3;tkX6wqY@;G!aPyip$ zO%Q(3F~fk-rn!N1-|0aXh44WQ%kplHso?jSHZW0-PWt+?fQzfE;{rm6VKY1Jx;3AB zGt6jdI+NikYA#l-44Yh8!A%{LCFU!3WE;GS(oio)jd?EUmHC=@Bj&E=#Np@pp z$}(ye$gVta4e2nIDeCdsCq~C9m7?agcuTu3swS$2 zu^6^_8`Keb!dbfSlqAEse#4+P)K+F}Aoo4%FGGB14gn^q>=eGH86{Y96xFl zS3j;dM|2xNHGxEx0*O)rc9?E}W@*vIo#(;+B3lD%5rN-Br8S>`H>m`iNOSKui|Ses z(2p~wU!D}Xa!iq&@hysVO`IWav&tD$?Av<~mj5Yhz@%H@Zl6bEbo+JHX4TNieP|}d zj?Uhat(=^4y@`kK_9dkKd}MzE&(ICTqN4h;*P>zjhnPwmD4B>xsx=W=WaaNkl(m#B zo3#pWZT-I}7a*I&khd`DH&}$o5x>8Jpjr_#$`r#l!X1{GBWteZ6LmGWcGI~yi4N9& zy_AcZu>PdiunXWA+B4)rw;tL(AYwFVkojp_=7i+=v{{||JOVi|(JeS@0Kg}R#@DE+ zk(3EszM3HJ7CLK1Gvio)WO3;PVknqFocdUK|9>#_6l9Ma>J=uN#TvS%Y{|2tkKMuCJ@UZw+4-79B{S;a_F1wf9`luZ$Pw88;}mcq zN|p;#EL3jdB&y=RRx%Dqh#-$luc=X4FyzosJ_H9v1RrdgBmrupHjs#{OMS#G%thrH z<3H|-|FI!hTYc3#Og4u#G^;rhi~!1u?c7MlqZ-}2wx~y);F9HxOKCo*<4M?ajiFH> zjxiSFeO?+du!`oGWSF(l!N6E-1vAv!5qDjlTfKLCWX@?uUbek3rD7;jNL{_OqR%F- zXadHVW6ONl);kHNB}X1;zWISPaHP3H+u}Iqt6_P9`x2`!yUSIl(Xd732LnF0Y94*T z94QIv#u+gp8|Pwb@(`>tGcNAs)mnz8XG&YThA1)?f4q~KFR&&_u|H&qpPd5~ z(Q}lW9nlJ`hN|liAY21gbuTkLLX?Z|>pOnSv_S<{VXVqc>tVyhtYXhCGcAr-49*_C zS5m#N$LcH6Q&`m0P?7=@XI8C}D;bBtDcvO$V>YNj4`#Fhq|6pbnVs>lyP`S}u(X=X zk5K`ey6*anW`e~IId4i&Jf;tOJX$caBHP|>9LyvG$S1o#pTI?k6Q$I|~%_|hD3sq$T{Xkh1hbWhaqW!M%xhUu#}i3=u*mwTFcSNW{; zRH~$*7_CrMU4tv|sct(e9k`s(yK#Rw$VnLq4fF^=Bmr$i%*ej|waZCyo~aES5K6TB z2}YV7H4R{&9vx@A6lSl=>0T@_nd$ji9Zo+87no@ZLhtlz5=uVoAWnE+h)MGm%WL@5 zWzcqMOmAM>f`=vT-6LZaAXfN0oF-j!?rP_6FY(#SP#2AS&!Q#n$s(3dAo`Oi!i|(zz`xhw+lKs9P$U`(uHt6Y21e;=P&nC^Awku{prm z(X9}ot!QF>Jr)=kv=UNUnYvgQQKy;{kx}Wb{X6vgIyk0BRK{z-&xlfuU})QdE#;JE zLQQ2r`%PYNpq3$IJmBz)A5>_n0r3^}l9W}J{D8d*a`>sB?42g|S$1b+zHv##!2K`B zLJYRV_b*#{<+_>%H1-3LU4X?-m~#`iZbH#L;kNzu&cq z(t0XSDnj)8cHlckIrg0QL700Z=AF)doB6mkGTqgLKCLSK^bO3M`$b@bEPkPR#I#wr zHMW{p)s|Jj_>lP6u(Ui=78|ND;y8m zp3T_@B&Wd_y+t?uUN*U~MSb4i!E>ESW zQ$o5N_sCsS(3q^{3gpZYH8#i7I#sx>peH4G98&|9nmDWD472k;WgLD+U`f`Z$5pDEvaeM$~`YAa=D{Y?>K(PYOo(NbXH2dd+CDdwJJ=*&Q3$!3$sA!|?hJYPbIBDV&2-t}aCsB17)p zQp@FHYE5CAgHfYctVNOQO_mQap%A zKV_fr>H3`Yx1^*Gh2zzXCu0QdK-L%*exo+=IvY5E~Z$Y9#v2+_OOq~vOnk5*#@zrZgszXvIG|Wkqa3~je6s;u!r^1QB-#YS5W!;#;d$)-xB>rQ zB(x@%GeHT=;6Qv(Pk^tld!+s>Wc^uW_jXJT@hq-VX)U5HtKr8>`nCUH$0vO1)<}Xx zyz8{ObffK&B!~rnK=7R)i1HD}Rvv448>K)DIECO&+O+Qm3Q=JK-fsv0wkgHa>C5>* zQ%yFD=B19T{OAnHg^fxOZUYD0EU;7=m*p&x{U4gXF|f|(Y5T-zlE$`eqp{ssjh!@h z(%80bCv9xow%yoh()aG~{Xd`2-q*}tGdnxGXJ^-F1r%>Fm(fWX)-|K+EU%rfF={ta zRh0$_5g5m2Bwkgx8MhX4-!y^lRKNyV6BEnf8O?X6IPUTk1PVwzw|uDl@FgN$*TUZM z_MRnF@Ampy^n}_S;0llIXBxJPNmO#knRle*Gv*Ib<)LrX7COB zEIC`URGNnu#9A_#kU=b>MehNk#cIN-MLbD*ip_VV(R=7ktc%K&?{c|kMN+Kt=>M7g zc-5|$lg?Up+nK;wamS}`B2AL@{T>T7@$}@^GMd2%aMvyLJ;hqC+^`=@uD-T5sYu^4 zC8c?mvZmMw4~bSYW?hLZ6|%r4*yS04QX4#J3VW~lvX?aGHx}z81+UwUTSKQ7lHL?WJ}=*Yv_^P1SIOX}9jlSRL|)k=hFE7fn>$ zeRp~mf#C{>L>qo=MI~dcxO8j%J~;$`6vZELii!T2`cTu=6Azl zMM(3h#L5FMHH=SfTiY<{*UHTsNVN7x0@jTbewX5yFU%04#?j9#+ha2_IDFML;T>n~ zlvp(v&F{Z?E`ak451#WHm5mjHOBUMl8kce7*0YtZ61~M)<_USi*)`7s9xjtH3HN8s zL@Gb+*g5lgM51ESQSG&@E)3``8c>JL3|rt-c6C9Y6~Wl#WT6-evbj4b?)l;3H5;rQ zys-%b-Tyf!m2GenPJyhZwmU^ETe3(5tlwuyl`(ZG1(IZU|1~H*r>m;m3(-_MP0=Bu zHXQM;aHx%ZGpR@B?EZ8w5tHSW+^%Mzx&e~{IO4YD_ejSVm^y}sH}mMHt7Kp!^hWD4 z4BcRG3*CS)dS7I}(&ax(R7?dvmtdKGWF}uyE4o0F&WRPAV5u9$3{#xWScOV&*Z(57oIJUL<-OZ7G@iZA;PbK{^X3+H+OkeuV31 zDS=CD8XF(%j2zk&rE#!{(*p;@_W}}gnW5JXvC->tbK28-qg5uXSJ~Q+Zo}Q|EA-VD zO@4u4TtvB_mlJ-t;{l!0V@B8z4c(QMSGe|XFI$1XvD}jkWSv8z&+767*sQekMTRSt zYq8~Q=gd3)vSc^Xd5kjZz>>$73`?s)-i#oF-JtYap?GxTj*pc^@Qx$wK)pl+9R6MH zX8Ptkgb3BbxmC}hcYGxYwmS7wNZ(f^bo)lU@ClWR8@etoQnC9NPODEnEodO;n_e;B z2J=7!>hHReR*P$@tK?>EnsMxO`B2rI6N1;#d$uz=2ekN`;#;baEIrx?Q!i_m1qb@I=)e`tu&4dh%BEw&$4CGOMd;hbCsN82Z}s56-L5A~f@ z0s_`)l<~hjoV!8#>8qV5Iu(fZO>E-LG{FdMt@u3}!$%=nFhP0(mZu+eF02@WRz~ZU zmtLTlubQmRA7!VP$O@d3gUOM$X@z<%b~~Y(pRTf7Nj$xVqaJOrnf)-~wY#wZtyC(t z+UpAliB%Chccbfwuu$^C){rX54d6n(pI9*{M}hnK*yVDLC_eKr!R3_K+jD4 z2j=TCJNE^AuVNX$v3J&|LNE{(E~c_*dM0{p0)m;TKT{U|LlzE2LDH9uJq=@=@i{2a zj+@X!#W+;T~cY~cGMEyvEEdx!~E_7}RzpiYO_Yg`^R=W}LIUfE*piyXjoaJ)_ z!CQ~(;2QKz+@qSPfODB7e$ldUm~7aF7uD=)XNCLa?*Xw!1Oqh$-7pQ=X$+yAVzRch zpe9xrm1*+&l1lEFmw6ieb{r}e1TV7(jyKT%8xLvJ+07rz=$?GOUz{xV9j>QnWGB^# zixN*uD(NI0b6U(2D%s()U!J$-POy<^VX=^NwS{&-14aUY;dQ_QKS6WT$YTi%E zHWq|*P4nsC)UIDJ6}##sAQGz*A*|@xKBS3rBnIJoedFw3F__IF*zv#Dz@~DVvAeqE zxA@;$e5J9%<_mySR;+ps0@H4b_(v(un-!Q2ZQU0Ubbmf@DK|_6IH4`MkmDP1<8zAL zgrb%#bydH$c{lgyo>f>JAW*%5o+{(d}~(jbpAhyExpxSuq=H`diqH^&dZg9bv3HZi2r z5GU|vO8mf$A=aj|v<~aR7&JS;7*tsGe)Y@`gSuI*5>DNE@K4M#I=b6Vx8z0}8p?|~ zJQGf4kP!;wwWdU6XOUh68~KpcDY&gMGLo_LS%Zq`oo2nOIc(m_%gXZso;5e~C@)Xm5bJyvXZ;0}$?BB{*&+X$FQPU0 zpV^Hyh0HQGR!=z-`qD7J6YA-m*`lveZRngPMKRBQZMUq@-MF&f;vM?rF`muCNbSvp zn|`^g#O=C!&yIAGpG6h=vmwDLBFAyR%I#Lc9}LDS?zW zIK71Bc*_ogBy)Ky66>@1+W~e#RV#Y6;+H~`{#^>sXTr@-GQSWvaFo5i&j&P^V&UyB3^Iu&`OqZ$_`+pT3!=MNZDgr4C~gPtOB z)xeFWC;aO4VuW;@6dwq}X0GV}_{*LmUVqVKe;LXEV)FqoxYw~vDc(W-p5WGyC1hn) z?-+|5NMhpe-BpIz8A+Nl7}%cR_Ac%L$;p7{t;TUOj_zagj&t)?4P!-XFyXW#mRlxF z{YjLK%z(Po*3t6h{YWw;XtCk_`QQPT>Kar$Aw!|q1?Ek?zH!zR&W3s61)1JiI7chK z%Pw`)6{vnKmnbsemL^G&iJD$z0&X)Gi3;~i;2yd`qu9+xXgp3%&@xqd5i#d;#|*bz ziC$pA=>3)Gq=8h4ZQYJ5FV5eF_9d$Mgj57})q+zR1u4wXYQs2Wf9w;HH(9OSMovBC zG_#>kWhAEp>gRFFp0OBsSdotvd{q!3NA*S*jBv;o?(`Yn#)#0AT2?~Qhnw#iB8Y*~ zRrw0@pe2+%NB^*!GzdzRg|fX)+G=T0VSexd3emR2ZGRw9Im}3KGtU?0@3M%vPx$lm zMjM6TIEPPL@wgsIE)yxbCP?-8z?PJhys%)1q%h&?jTbtXaU=4QZoEN;gd4G>^=hMi zOpP9v;Q&@tA#Jfl>hI~SM577cA;dC8hyHB5R|JxS}e9C!&;4Hb%NAq!o zzz=KI4sGNYQ7HqkQYF;~aC`-Rm9af3V+W~5vee+i24R{gjrX+QbfKaQ>P3F?#$s4Y z229}>Kgsrnn_~wJM-;awujpJt!0{1&qTJSu^p{S-Q8IohEhO;?znnEY@Ek?AzcmyD zRs7a`!cEC?Jbij08ms#nVL8W7x<|59c2?}yp&yMwvYeE~`w1otaD(Dhzb#o_pb)?k zNg!pMm)Vy0AlKtB{;*fnSrdhq$1eitY@dY(!^z9GZF*8Q_(99KS$K?X!<0whBn}2Imq5=uI>9bHg>C;cd~InD!BE%Vj#4}kRz!i#v@hd%38&K|lMQ$Q41+?6 zr~KU9h~q9md6Ja=5S#lLS(p!`Vl@RPJ;+L-^lXL)3NR`dPK_j9c%OF$r3RV z8c8VH$X23|0*tk*7uiy3SP^0|WSc6>W4o!y&)wKG_f z^4DTUj%zO@M=rOl~r(lqQ9N+{g;dCN=GD>dMz{t+%q0aLTubuz14 zuZ9#vNaE*3O_ckRg9WXT;NLgmUP^jkqD&4k+mL6-ah|;Eyh1Ji#!K}nV+E;iA~ORz zI}oCq;cn8c-HB@>r!97a?h!JCDI3nhnU$1ax?L-6%FcLr^pI2k2B$q>1 zD2cp3?dqJpVu=ng@w~1vZ9k^VD8~sQX?;CIi`Vf&BVh+p`Fz zH2S5~K%FwG@hpkg^puyzN8Y!_}4@{h5A%_7$)(81S0Am}dE zP#X^$bNSKf*D?OL>jI?40F`6^s5Akn4CAzC3JSAZX~spI={7W)i_I$;<0!|`s$!xs zhtEhVPeRo+Mo0DzjycjW2CL(wa55+9e|auAticsOr3l4`Lb&leo{GvHl2~#QK0l@Z zZ6M0OCl79nr0d?UJJ4{7oXNP(U){dMw*2kbTamlMz}$sOFj6?e0>Xrt3L~s3g*}ew zVY!ox^5yL#PG2IIpe1HO@BLjss*6e$!|`+`?>Y(XLZ%1Ze|~2jo1Y@(;&8PVhXC5? zK^6+_Xms6q@6hu~oQuL9s?iJ1FPlTLT=v#TXi4Q!ozn2=9MOVqc)r03SPe7D{hQ@D z(myb#5Mux@wl(oqE;f1X93!8{TpZz=Z=Iw`U|;xQB!T(+E$Np&_ePd(u#J;flb4oP z^-GSDaa!W34Z1-3ccHrBpPhMMdA2`7SmNZk;v}ci)mt@oDFh>HS+FPJM#1&2uR`UL zccy*{a_XzHpe$WLX_o2g(m408u&JLv6w@fr!H-7NQg8uNqw7g{08xd$2Vbz10Wu+7 z%9)0ds3^21)}9FS^HY0!ZP3%+DbJFDL4q3ef~JCjDU=kxSpO12Qxeqzy=TNuUth-W zY38>2cw(rJR9pPF>4hA#y18>X;K zAls6F^R&^p7EygVp~~=})^Fmtn3KS2-iQ069^>~SpNS&cz#eK(Pr$kk>blr@`m61p z#$X$tFg7i#_zru(xAQzDXOfGa5_dPzY&P}F8v8!)Jf1i1oYFWirhJ;-MLN4HEQ$#R zmR>n=RI{lqzb4QZ#4-WSJfHpMG6K9AR;u~QNenMMAy%I{$%VP-(_`8MIUQB9O*t&) ze$$$6F=d?!``R`i@Nac3y`lR=cfLHPiX;CeaTJvE^=4I}%*~9x#P-%?#OYs5NQ|S) z6Xy91k9j$XgT=icgvx=Ln3_?DFZnO{aL3zbmQ!v4N6;byC3n zbU)Mve`9K{QT58O^y@WTH*pF+`Bhc*rc z+#j#b55nC4jM%6C!W_+OG=Jcm<1HZ`X1m%P*x15+`EO>MXIE_vvmBP+QOk8Uyay$G zyc;&*B+xIXIh_`EwMs6SpT1S^L#>NBIhjdgd`ByM4D)YOT0apGgpjL0Xwa7@;!ua; zhzuE7LkP|CT^6LxV$S`Zo6j{NqXPaZ+aHzEqxchGi62{j>SK!Y75^-O_-_gFXo9P$ zh(MgKAdtCjCwHYWFKJuy)IO*l2R_;$&T%_=?{>JC?$%9^4atNzC(Hz?v>lWgk8MQk z#i}RtMOeN>gIN!`F3z`gmCWsh_Lgvzbn%^OeOU6%Op2;fTqn;*ph`6^R+lsof(AtxA7sSG_Q_5c=QqWh-r_NfZY`4?ki+MbMfP2FG;5E%AbgYAr;;uyqg^ z_uuE;kd7Q7~n*mqy0=8AENzP&rE%ZQvTzQ9aa{8`X zbE~JL>;}^bmgRh^nWxK#>vAeQ7L(3rKB+545o<*Wr=|$TtPHGe4RYe)CZ641HJtNr zk(e=w&rr|IY;*c!s15=Z1%nZ4sd!Ki8AcLhImzc~`)81k9`nkjtdzx(8QGc&L|b%R zZDJH{0i#Hm0G|b{E#M0oAi*h9Tv~@BBdx>H>l;gO?Dtd5`P;6Y(=^ z3Hbe~a)ZUz!tdXel1JfJnKh1pFP%+8v#-|3)DhzI{3=R@6V!h=)`oR z&1~%PAfgWFrHg?#U2M`m3E<7-#LRU%|0R*oa9ugA5!m=G{k>YO<$Ot5ZP47hC;*dA z-PR`RyjEq>Ph#dMnA5jBihY^W$mTksc~V)sVHNv;KD{V=6+%x|4%IddhTIHdEwy9P ztC;WHb(t`Dxy_b|U`e}fnaowO(GK~)lLSe_Gcm(7QoD*A67Zj*Vs7Pb{#yK|1qsMP zTXJ*2A7&A+F@Khu02bZ%-%gR*Hyejjcw3l|=n7EG(G)c-B~k|?COZT@Sl9y-h!o~E zM#WSZXog_yybm{u2D)o)k-SqyeKsx@l;%=+R|1wsBRD1?(0_ql;1OMR&Jwt$SjR5B z>7S11jipYfe~Y<5bDI3sUTJBI`6i`vb|=5XlCBmIo8zrjwU7|ac$JEa_JaPHvhb!_ z51bBdYUPnB67;}^+&-Kka?^5wuh~szhOk%<(PH4~m8MHPjeN3a+gw{F%r-oH)>esU z+L`oxaE&Kp%%`Y&|L_j>_YPLRZBbeOrfVlPJZ!ei&2rS^#?uko-oB>amMPQq+S_g^ z&$zdz)K=1c@ymIgfhIBQlXt66#sn`T`{(DicC?+H&|A=hu7h7T3w9M7)}~~ewJ1J~cSHuM`%x69kdxMRo~WNQ>A)^?Jr>sX$JUM;Ux8*x zaq}8-h@X5i_obs;hX)sR!7c(Rj>>)2PkoMme8i~YCd=@B+<8WVYYI&WD?2u59S)n!c&8>V@-^Xt zM(AIi*nba<(dYPXwEhZpE5WMh8gG5qMw`!@Xe20pZW(8}1CD%xRyCQ_XRX#)ub|=B zldjyLqal^%c1rdbhbN9#tiVl-IyuWN8mmoD@J2T%)%ME%_rq7rw)TA zaB|mg0I>qO4?y`EsAvV?keT;5ZJA%ykT_a%fZ>n+!i~)bfoL$QUHf_~&KVs=nja}f zw-eF+lzURs=jMgdj_=jO&p7MO|D-&em@l$v$&W@eOB>awJYWN9$L|WTg>;RBnUhoX zM#U#S{e;`xM*j7cWqw1uIuR6epcQRe1}lwG-4u)G9zP18Q~rSO%^h<~Qa6ArjPkm( z7Y!j`{37*pmX!ySO#dpWaGL5oHm0E)IOa~Kk2eyeb*~rWmCO2uLnaxgQ`s0^OYUgh z*e0?9Xg#Q8G^?>_kG86JAm+}ioSQ6*K>BKK{%{F`fMR(`byvPHGc2FGW$FZv50i@t zrXB7xGD7u9z57YdCV?dRy*fnOd1f%jTcSg7~imHIZBVejF)xAgHL>dOxU_ z{grX}4}p&SCPw9gVShY-r7}WsxdjK0TfFfr{1maMm-(?}Zv3zU76SB)8_!PE!3qGU zm|M}qbG+W(o_VxnRSdQE&vxrd5fSQ%j#xZMZ~<&#^DqLwUYBnCg;r7RSuh_R`SbwW z`!`4RO*p>oNerOf&k^xt9_q%pGGAw{P%lY`{l)E}!CF+0U7fr3g9}0n|L8kRi!59U z#yC5qCK?Tmlsn6Hww9_6V*wKX8F`2^DX(CWd{aCIB60@-e8#@&S7X+cn{EYD(XQ-Y zk$Q(zv{F!KWsKD<>SjpHEfa@B7;+_v!-~V>Y-H+h@7BwqOAcqgXGW z{vLY|2P>dc%aJS295|%1;S2sLE9WtW0TW8e2Xn0@7=YYXV%q4czca;digA~}JpEJV zo5}xC>4Bz3=*E*Wt2Ap_O*)#_B6l?Ryj|yYK}=beKgKHb_gfR+(;MAQDtyRP)P#;; z?R|m<7UmPu9p|Ovw*%Z7RMq5oVQUO&=s`=?VLZ)FS7f`7N8$XM@4Wo@4}wq~!q50! zO1GUa5QoEh3J;HVpV{p88IQLFy*lzLq9T8qu?%ez7J!)n`n6W%IOiS*wb8yyHcl@d zZTh{vLxJx?AX;v1($~f;7r%RnPHGT-B*jwes*$*j6BVssJW>2wM%o*{>h=m@T&S7T zZLhU{%CfHrLb=mZC`pca-84C}**MGsKdF?lt~0~0Om3np!3ZB$m(BunIE-bz5`dq& zSKj4IcvmQWF_wMuVtu(G6?FelSNl=_bsII2yiHK^QBWvlJ9qvn<1{vIBjB%o&9>H_ z4z5pVMC4y_$G`Cm^XfUH)>cKqV|>ubugpPS)*M>*W}ivn21y)1i2Tt( z@xIq_Phu0p+5cWD)Wj!qg?A8-;aWL>93wnFFh=K5hVL3TToLd!7fIB@oeiG_$jklH;`j%m;KwURLomsWTLXCGU&;Sc6>#CptUB6xuztxZjlJel0 zL->jM?-{Qi5LMWT-)Pg()Iu2eU4QR?`W5`DrBD_BKfs;*WZU=sZwsgJ`tnZg7EjVx zUuxgwQB3Y)gkgNWHIZ|b%t!36RXI*^lx3cM+~RyR5`;&ugDVQ%?=&O$Vslk!c-~u8 zb!=}C7n|k2@s)8%{hbOG&dL4`H@D6J`hyJ$S<;GB%yQJc=sh9`{8liS)-n&{25$GB zy;t~2(;EQHtqXjt$cZHPbKABg{5`_sQeArsfYAeBE<5@B*tb9Dt4%!H5Ao>x!9E3y z@4qffKy?oGmR(i`xx~U3MVSz+D0L5 z*L+VhX?o9`&6w64G2EBN#RJRWT76X?(XKFxY@Af~+m&&hvH37*u3 zDWQx$kVRn?&T)hPc`i^(VD;?J^y6FTv;lY(!+15h!|1Wa;zuN6EQ!<#5Bp|Dalrki za0QDYj3wUW!SOYqxz#8Z`mEvNSAHI>>*wwy(VX?5o5(12lJlEGEAbv&$%HI%;`*up?5>r zYHksIk}MYSjm#2xLpqLO-oJ`}PgjPjy+Zo=H0{uAKD`W0tL2s=BDLU924GqD;GjRf zNPWV6!S9Q$G1YuPL7O{wmhEe2*_|7nyTBn+ad6diI!4rVsb%)OSoS$p<}%(htxbP% zjrk7RdDs+weCN4*%yQN()g+|r-d8;q{6HC>o(G_9f48Z&B*}b9{?lGrna;cipo#<^ z{rtN96ScEx80C|VA{1S%9=lh(VsAh1M>z`U|5Oy;S2K5deBP(J2TT;Njq{|1uF86A z+K4TYk^Mb<#l5T5=BTe1{@lX|qBNxODeJ;mWq>YjoibAlK&i<$6DO|PbwE#{ zr!QrvH_v11$@Y&okPee;jz6WO)S^_JN-SlnfnyYpx-tk|+BAe2d{pxBvi}tM`x{qS z&DSI@-}EmOD>BGFDJD-~*wSP7;zy?recru=S-qlXjQnglKoE(nYLUnEulSlk;al#h z1{R1?TaoA8VDUB|Em@lWzQ5u=8d)dod{2^&L6z@1bSL_7F|4budvvtxp_&}ef0a^umsAU7j4v#B>G%si!$Rd3as`PBvnbR6k0X>t$Nqz~`=hWy5$M5XXp1Rl zPzPU!6%OKa86}^ETs#T;6ZGN!?xLIeWM-PJTTs!TL|9 z%RKyc-Pu!=W1l8hGvOIB4SZI{^ZOb1Ne`^CKQ zIUA{Q0UqBgk|6FM8}(ua>n&(2UeyWZ;JqzQOoDsE>VEu8_K^WOpogV}MIa~5^uxqf zsIjA^?NO*NY7qFyGz-+oEj^&=_)xKAk=DK?aXE)=4SXN0$y)d{?aYYKINMq7CN2iz%8kDT;u#a;CVSB&y* z_?an>DThZ0*}tZdar;`o8$+e{)*YU?H*i3OaT&Gj4~=1e1R0CBSzaHL{~E%{@Kz74 z507{VC#%{Kzet4y!LO*iU2rc^qW`MgKvHJR^ZWQ2*^wxD_xFJm-vwR4Q9HUcHojkl zzV_WUtIGpDg0bj0ZBT1Ia&FhBXidMFsB1bNe({HleCZ-LP`ZMz83Uk|9!*x=W$?II z+z1-pamCL#z>{E5y%&~`Vn@w3 z9*;Am72jkOBsolP4-`^p^0Z`7#Lxr=iQ$wJs;UK55V}QC9!pJ%>UA40(0$d5Y?3&M zQHCf&nE&n#{M43`Tx>rR4XSIR$cDy>M?C3$I&K~&JjE$+w6 zrZg7Rj({bfX*V>AxJ4aJJqui752_M85b%=<;7;uY4jOR$?PxSo>Tc-_MUg(-w{q+=y;2Qj!vU*hnQ{yOdL zodI=tPWBwKy4?hl9?O;`xhRdFSMr+vKT0&xy$+ii-Iw$e?FJ4&52UE${TOA-IMex{ zh#Fj^d{~T>I}5qx@B4hKUp$WXb?SFcjSuSn!Rd7qQ00h3S492Sn{#+}Odh3z-8N%Y z^&6uN7TQk_SuMuw&UvW3taZMSez{e1$N32EfG?cm>qf8I4ZnzY8M!0?WF8iwOqT)Q zEkyqN?#%R7bv&F;qBEWvE?PrxLP%@tkunshWlh`ch2VX9zMrku7F)DT-+6@;~yD9b6OJ5 zlzT3e{hv>ODqTC#>vq zAkOlR71q69u7)vmyKw`o*Dp2%*Wogr=(W#50-%IVmb1jz>eebAxD>C--jK5HOKekk zY6(%z%zw;zL2;v$M6bjG>Rn9ZqPSy;;Hc(7K^E=}5fm2sF>dq0CCDs$fS~}cV-?bi z>=q@#y#{$Nm+mT_5Tf*k9^S`;gei)3#^^9yhLv!N4*$fmi`3q}{!@4R@C|*!et_3# ztOHD3mGY7P(dO%?2Cb>G@y$Ji&;7V>0J$LL*ZT8bp2hcQu0x&}U>WCaXqOc0O&63tq+oiF3{j^u_R|Fa$-ZBqI z8@0ayo{&okJV3b~aDBE(o#jidb%ovhR$P-P`5JaJy*=A-)oIW#y)%1H$z2m(1WqBZa9Y;PKEjnIYf zMnvDe0&IC`jJ~qrCJU{E5X+hN=G5B_p#$|Lb~fw~BknH&6y&G?Jmjbde77iYVxR{^ zI+QqWQC3B9Eyk*7`hm>{5?gw>+LpFf%!bS6Stc>mcSFXk*+xGZI?boNQ=vYi%@kkO zjXe|0!(Y?q(QpNVf!c&mbYMYao5D_Kj_sYae3v2L5S<>uCLur|=GM;EDt+5Rk63`F-#VqwIK_)U|ioFs$jmk2N71nm~ny zm^0Z#;<{E{b(c~gk9<7(k4@T_sc#rCa!t*QE`7qaXEG25Eo$GdpIjtRl-zsC_>~xS z2M|G3!tySRwwaEU=)++~1MX%8-`%3RCjFd;PoSX|eJ$5D0D2-icGi^7Ta3{Og?h0vx?L$;Fex?@>Ope{GHM4LFy=Sq| z!QBt@HTud`2IRG7xNQ4^QN?}+INiET`5YjMdKM6*0|*M>7m+ld-HTC<1A1g4`cK%} zQ%|m>YuGrn8LolAsltHLm-QdvroPOH+-Edkx|inPwet5A8n~6w*~ERjjT;)VTQ0F( z&@QS0?!KhLkSOh#VVL^Pmq>-T`3)@el+T-9}{B8=XlA50yUD7cA1Dp12++#3zPM zYcwKI;h)|d%pPpE5c33uj$7h7h=3C^lwg@Am=jgl8>#}2M_yt#o|@GrZ7vZ5>FgnU z3=2p7q;yE27m8$>Stcs|XTQY_ekmndS+H#N^!uz12-yskz_`;J+gq9}9p?F16mHyD zx9BOI(-UAgIpD<$uQggcB|#eyw;A8-%{jc=qA6o-vb<)-=z-lL$o>odDj84=#Mt6l zz~toh(H-tI_K1~8X)akP>FS>y$VovBBJLw|Ki#?RtG0T1kvx#9=@=nt!02CMt#=+S zOJ%$6a9L05@%Mv6CNHbpfXjmUb>WtWLWJzF_a+#3U()+?o5i!THH^-^U7fw1o~ty0 z`~ny6QovBzQ+#Gu)`1TgHB9&d1<_zh0kL8+5THa9`W7%|`uq1~$un$^P=RhJ$mW>i z66=#fA{10OGGc8kZT|o;f?bE<6VU+NgiR?Zc*qHEz%f0|l|FkD*vb{LB9IbAFM?+} zQ7AHxwvXs?wLAb5heg(m>h!O|t=TKMn*{h+U^jH8Y5~6CYaX4TfNbJz&emkHY$Tt= zot^{dC3duB2IZBfn=ZIIGgCu;@-ymB&W)#b*zdr&XeN(FZPqC_$&ZK0D*yIkCMZO7 zit_}7Y0uO3SFqPV#tolfoqq%<#9}YJ5)|%RD{&9QXa{`S`~{TSVjhMhm7K*Wn>RrN zaptq-Saqmchi9iNgug&ndRF!fDuLc&ApGLB{ws);#x!R8XrJ?bnqg&wKz68nPo z;$9)U9;T<-a{;bDXb4pePWI0Was)Sh{p=eSix8?^^BJ<=0EXjs&&{IVx;}yWpFki) z$XCjc#B+NGsBz#sD3&9qJl&C?J8F{1Ow-n}#O_O-ATr?DCUDaHlVD3St{f^0{rFlpD6)c%eyi{j7A(FsgN> z3H1xqe5Y>CIQeVXFwgPURArw}x2XIEi}w}n)gH-t%q-Iq^ox|0Q<{A(^cE~vwCt># z0Nku@^Bv|~n|&?<8aHKkks@mmBO{=SKnb{b_+f54PU3|xY!AwJ+*lFi9PxDmsXYR9 z0wrWOsa2IL{A8Z$O|n7h6@tQtY8LdN1*|j+$i08S>CVw7YEaDzbA0mbYWq`FLPdU% zm!nhhBIsO(KrmZ`w3x-;QoGoPN$y@EEqy55lIfi=eYLXt?B3RZYpP)2MxM}uF7uOd z?h->m%yGuAS-1&Z(8w(+M-s6#n>APZ#%kLNt?YB#u#d`=7gsv*`Vy(6Q8K#qA>F)& z*B7OsEa`_u@K&<;f!Zp_&jN?CIEYwI6K-vhKZY&d@(={RAj5%jGOGjpQb$mEY=1c} z{WWP3I?N`rNFs{d_SFoqNbkzvPMoCn-;9^qQ)w7R^_T=TE9^|F6ENfG(i}VB{fA_p zKZlc!2-BbKm72arGhJf+y#dlBJgZ5I=QL;~)KB^-rK$N5fR=b+Bgz^iXvqxs0@Qn_j81T2SoZp-M^{5{S*x*6jh~PRQ;M z9|?5uf_(X*u&anOGydmhfBD`q^RyBUs8IsL%P?jsM$0q40#h(GeUUX}y-ktbl$gQp!Gn;P&ftJldeam8+5Og5cF6*v5cJj- zuwX1dG$Z&(xMO($^)h}>GgxWFxKLuBZb{WueWtHTP`m*OvpI0M?#{)lfjGy#dKn7W z&xYxt9REA0UUu?Ry_KCZ0=mgt;&t+FFoPBqWr?TT)~0mY+E)}YdPdF+EkRVVd9j8Z zf)D0|budp@SvA@C3o~4l9|jXSTZYIe6=3!e>)5o0$li)WCKIO3 zDBW6tq>Mn`?OG;ldq#;ExL0@l>N&{%w#;}U?7tLrz&vlu;SR45S+1)ft+G=7pE_xs zr$C+W3%f)~Ev3b+V;jf>&}Q}kQ$>3ZUtvEqw35juEYx%0`*3@mN-W1}7u>t?l|Qb( zJ+zUO82c?ZsII84Iq)y2AmvgO3Ig;)e6ODuhQQLEi-ac_#D~hFa1%)sIx=kIbKNOw z99Wj#g)5nuDvCDtJ>1DX%KV|jaix4XL+-!+A&Qa~09`Y%k+T1s2M!7E3i*s7jlIMJ zYRQbl55&cl&JsB=el4kOLgtv)*avi_{=Q@RAIyD+V;KN*p6`1upu~nu=*Q+CCP6ry zG&<_W1^R|eO$|bcAV>I(FEkT$U|+Ou1(qaJDOHO6veGK>bapPMZ)?57nsc3eXcg|n z9d&%}ap;cn4-R(WU&!qxr=H3Wrl<6{UAGCB@O}2L38D!WfJXd~APmKc=Yjs%-0dUo z&2jQrmVhpBpR;ZJKqie=`C8?tk$LIa0)bhuPDD1;z87_T;cIDom6dw{}} zZ2Bj`T^@x+sTgBiA}?fU^C+Ix14q4BQU8YLo6b5#wYFOLBbThfj86%@=gVNB=Cp zIyk&pFE&UQumW^Eomk6_0tVC$4878ItE!%<-S7U6CY~;wz%B9Fm!}I} z4%JI0Q}M)se*sZoHsfUL5V=^>VznNUtk>Z;uyS)QfJv}7x=AW zU8Wyrn)N(uebj_!wxu#W=9MDXU!)iiBxe@vFb@~})LJS>FF`>G-aH@O9|)fNhA%f( zHf|r9*0o7$GdjuPrA7GjHMBr_!r_V{(wqiK>pp1o#d}>}oAcjVzMcl=Q2gPP0hK7nzA?I<=hL;*;X<}HV4R3X$854s~`>}v-GUrD{kLJ~aoPoC0sKV4h((2TQCFYukzg73TSATSIb zzdycdA4D?+CvE>|+~OJ|heY zlwvM(yVQ9t_)PN)Tz^Ehww5U}@P;6t<*a{K_z~{m5V@EO?3Ht5{Jtq0Vf>SvY;nn& zVY^kpTlU``h+Jq8<;tf@I*knYMdIJU!u^;%H;AL`hVM3*^GT2H9`c5{i)%J3#Pty+k*^_)irRMkZ+O&w2jR zdLaQ;9^V3!3B5IV1GbEuZU?7@-g#TKqM#Oe4Iu-Bz~#hqA7balN63nOrc}4@OjPWh zt=4!3DEnKZMz`~oK$#w+%Yd+c`LDgoesF9BN}Nv^=7X zMQm}*=bg#l{wsqlUb#GX44CKeE%oT&O)Efx-3_7dj_9r50nT&xL>OWLfoRHL4el)c z@I&t)9%6yb+wr$7NeMr|0u)APg%5UCIw}Si@5ME(;@K44#-5+KaJ_d5GyLBhB^yh;1@J3bNSy`$^@Q_0Wd9rJrcvf3HaLR9%EL3{^OumEU>@da}dML$mk z1(q0%h!j^Al^}hz0NbbE7R2Qn<^ow(a^@zt3n~;tEkkT}K}_&nB))<2l=#Y?sl-M# zUG1OP&_peP;qmR+xx>h6j7!M@R$CDktWy{_h%{Qciy#-Gu6sU!&$b{5nfUSc_C^&9P$RwYK8?b9yYQ9qiHuN_Z#N)W=SY?TpMrw)P zGHMB|wXSSVuFi$4n^={5lTmr3?{UpBx`d7qMoGo>?_M{8 z?MhjGW|`}z6G>^jA@%eQ*5y>P>1Ob?>T3l>5d>D36$f)PD10J^!z)caDy% z3;ISoww-ir+njhZv2EM7jfpd{ZO_D3PcpHsi8C>8KkvKlx7PjcI)C)))#se5{VVM1 zUAuN|N9*9q4F!b9n!1bdg#;G;;%4p)ogLP^lcW`EzV7rEj`G+i>ka!&>Xpr@ag_%8+2C{>SjVed+PB?1ve#t^)khjZM z@aTB+{M#!~li>r8V@w>Fz^Xi?fn6fMhm>ZZ5^wnN29cC3f*$7e3u`|qO4cjBd5U+I z>D7(?8CGrn-;p^D?Hr(y9)6-= zz}i2agCbsvJ+`47rV5FI1)|~mYn&IwZ`MbbqNNR{Jxah8AN_-v8-o1XKslKzc1dkQ z#D>NY)pa2!V_w{*S<<>oH2j)wVE)weJwmPya-EK9McjESpDpCw)79N9hrZE zwnk7|#+b65oCKm@V8PlRwQQLjN)`eiY*?rpHSCcO6qZQVP|a)%9S1qzYx;;|^|u765U`Kp%28pFBD=KwM613#kK$Dl(#Osjy*WDdR7=OXuFt5 z9THWRB7fAjflR^Neg|_~At>D^CiatgDCB)yGC}kLjpY#$ip9&Aj8Ab*1h})EWjt@z z4&!EAh@~1lf9VulrkFys(C8j(dRI{!YpTAdmC!@HPLG+DaR@xw+u9b*`yZsONt2ARD%4;J?AL?tM=82j!sIEHqP|8uC)k2+8n3WSEiLf?%G^ufFsZ*7X< zFPYOcQiq9?iw=b)aj@)}`iGFfcS_z0bbbi~W4A-zE7nJ`t~fvK4*?sQj%&$pAL_c# zVxJf%u%`SbcisE$u!c!e(ghv)h zDJATG9C=d6#j(y-XZ+biQvVf#lBjAJdV_6}ceaoZ>VR=k z8Jv0kXV&0#MUtp_^eA+~22V3w*fvaHn3U&WX_gfat5vCPjLEW! z@h>bH$XqrKk$v|IWWiCxhO~5VNPQ!-ufhwzQ{gzTa%dtzg9w~3C?aC5@M$}>7q4Q& zhFE6CMDP(3CAHcCSA(W$ zfvkS>JEA*GBBOZLm&K}&J&cYOz*nMfk7zi8-Qq{JHYvIvPml(F0d(6~BsIZ`{vo4< zI8B6rxMF+@Y@@Itokf|NSW#@ z10^@%wP>C{6!ppaZ;g?q@F?r1udLwlWE&TJwRoW;-xk})_zsSEa292};>&%FayV)7 zim6K3oJ;*xKIn!k1bl@drNQw50SQyA3Jvui>zXiTn1ZV+M6eGK4X-H1uPcedy_7;- zas(8K@vwlP9P(waL)Z^zFYI3-F}92 z`1%KgT^AOWjqQLj$onHzZ)(G^{5I)tU|W5V|SlyCl^PFUiMF zd(bCyX%m6p_F-*Dt4g3RAAed8t^WZYiV+a?v^T_bUg8Kns5RcqKcv|}4})N;7+-_; zWZ)$-93<^9W{_BlqL=7UDW1q=SVbOa(-|*~!YNOE~BZ(-skMfYb{jbm+H3Y zCe48XnVe_qdoe0hQY{&jQX7XG&FEkXyB>&1!hd!`EsEW(ti$V%P)l=Fe91~@E8zsL zr7TcO&QepUqN;(tA)0?iT3f15-$9~R_utyt!SP?9k<@=fH+UH%;LesWxpM8@KA)5t zru$y3Gqs!W6KLs0DYMde80~@>CH$um>$@-x)*52nE||jgtyYDy{J3jN4l9G(^|AKG z*#hmDIMw|&%dZ2XN<`61KEv1P?_Ke%vo70bBcKAzi5!4J&lSUxyv>r*y>x^-fz0-y zK9B>G0{iQ1?cw!^0jiZ3C0wvB9=CXrj*ex&q;M_3-)aw;PJ})dWBr$ig z!)s{^kTE<+tpJGHw59T)cr@je7L1&lLL*b6#@o<5R$WK~ehi=C$|VzOUrKkqyPZuI ztVSCu*>1GZCsj(QK~MO1Ml?BAoG5x5ds>=rvh(9(c}!&c=A|o{lf=OZgg)DcWWkZY z1j^L>7T%b!RiRZ;gVc|pkE)auJuvT437b`o{KpQZu)T`mw~@g z9e_w|m#zSy4!)KHiDVP(TS(dvK{|ginApa$0nl4%;xw6@=KblFfa^hGizyFL|j z&_Zohi163q!>QgFnTWfb+!EaDoUTWS44TIO1OkepW@}H0nqM18eB{_a4KrQA{28eq z>0@d^2!VOj=8_J+aOYyaboCzxbA=A(3ZU;dU&~)7hiO)fix<$yCYbEnS}Ro*;c8!v|Gsic5kd;n8|AtCw5W*Se#pS^|V(xGX@Kv5rEYPiV7J4gs&$~Qag0qxO060L#F&P--4Bgr<%$=v41=_Hm z#d!)EtthqroMi;}p}6_HLz|fY*bVy2JX~g$b_=n-=hmz}RmgGaRZ0ud-xc(!5i435 zV7?Aa%nMIqE`_8H*yi+C6}@zY&35^YvR)2BdQyI0H$)9jziSL+JBd%FUI=zMVYp~C zsOsB(7M=`&+rsNFjV7QO^r6=-&|~ZH>6_J zd^z|juN*ybd^X!BFU6SHS?*rNqWCMKNt(RBVoLwpSmViTF;ZALQ8&am=}%5G#k|%2Q_qM3qM!X3#>!Ry%4k|eF=E+Wu-_nsx>9WtmE5jl z#`XZd`GU=&`(AeiXvp?5umhH$?~x5W{H7>~uAcZgBxy)VOIUvfW3B3)D(sH*tr&iV z+zGWZ<{U*SO0=bmwecv{gz3iJs2d;RCe^^(<`r~pMRR4%?M&Y26rB0PjUHwW2I%eQ ztPmE`f0}g*8bA-z5kfmOrf&oL6oD?fiqK>ihiki98n8T;J_1i;6$|LelwU$D)XEnT zSUy0q-`ssW>p{Pd2T=RvTJJe_=L|(ZdF^NL)UL}0xwfFp{tEfY#JRx3LRytiuSgc( za0vNzh7{r+`{d&1cvx%f-THnh3;MhViO&HH#5A@J5IU~-A#d1yQ=fl&$v-YpVtyRL zH*8)mL@#)6nXw+R{jR1J&VmLv6KO0}dY9OMc!TH<%i}#(XY?gKhTT}HBWvpzjJ84n zIM>jIo(C^*)vh;_DnDPh-B46YwWy&=)~TMk^#5zzdAbW`h5=$2G-+P&xF60dgkeMg z;zf!2T^LVF5TCuVA>j!F%6t`wf%Tsss{;SgvuE+7tyTAAl>t1-@B%zvE>*fTo)LV} zwOC%;wOgT;DTGeRsxREhc7*V~N!Zf>3(ePq3djqFI%mu)<=q2*V zPB?u57MeGG)AjYxG<5sAI#rpwjtAiKaoM+6`&fDx7bciYKQOVh0iA+W92#Qv;jc$R z5V=0{Bb)u*0z_%HsQ~F51ciEIX>>B= zQKjd>NldQbI@E?d$4DiE)I*hCbVx%3J&GV zKhA5zzlS^o1%SwmD6c`HGZ2-UWt65WqY3C zIsdH#I0ihXckjb+Ryhg1V5`484{#XwrdlKx<3z-0;~~~LQQ2F2I}K(;HW+4pG@DfO zz5a$GtE9FON)$K+5r#aeFdbGJ#VvUuC2;nrBw5ZDX#oHdRCI41v63s_!1d!F_JeFi z8(vmEDZ-b{f_-sA6E0psL#!s(yoS&9uyC$vojCTSu<0&+HStcYZLEQb=&>mG5nt4D z?aMr;MZ@}O)h0W?h+oS{6MqQ7BJ5;*?bWvqZPrl9GfTOp2%U6nOfkuH0D^^vf(@f~GkI7&Rfo!?=fMAhpEn}uR$XfG{AIN4 zSGEWjw|fwXZwwSWc!xg}dg{f0VlP#SOM{ElgVGFzs~Mps2P~Nf2`d`LDSqi?OcKP& zH>!inHZ#h-ZTTNcP~+DfZjx(QVwCAk@jY+&lCu+PnIEItZU zfH6~9oTRb~*B!6PUB;IY<`$RClKu3OUkS@Bir9IwkgWYMGKl{nQQianngaQTj^fT* z)c`eYDZ$Y8ADK6R%z(bLSK$C1gyFmQ#a?OH7c#OokwREzFd0*EG`VyYC}YLGI-W0r zGp7;EZQ$}%1>;1NG?%2Hg=zJgCw|JraYS_+J2Du7F7S=D!ZdzEVb&Vif zr2ZAXRUe7vS$?JtaG7$W;NKH~7_R4tE4(!+uCm0I1lzISpmzkDD6(?O${;+zg)_>j zFmK&>BH?H5$F%`Yu)1dxa6BcUmN?O9li`s(>z{B04~gxG4wCV*X0Z|6l;g%B-)o^Z z8I;O@H-e;>I4%;g)*8jxWE2DU;lrjQk@gv`KgVZ}^9`r?>c;ZO)jMYxl?GxP&Q4ml z0+@cfWX_+Mb{hTu+j0=y6n7}*$AY8Z-Q-nX8&@ zcciCA{Tb7`C+!$Mp%?#hY2>5Ru^e|EsZbDCVsY#|OFLBd>iC*vXJxlNm-&}70$R9ffuHl|&QhLj# z62)BhtECD(kj5nVC@(hzQD4jPo}k+83xmN&FH0(y@IOV67>s3QjxviCKV*Pb0+6OA z(rRmhAS+mkpYxuey)n|9!&D~fCshLIS1KnP#5M<|f25Ar;qT>Hmyw`^Pw9)!sj4PB zN7>o}6Ep`dL8mTOXd@yc^j^^0U!P)-KQsLSr++aKgMR#q?x=sHmcJnL%);%s-IJ7e z?@6x^bIJ0)>h2h9NpeQ`VpqYpm`|ryo7jN$ehgClXbKVJZ>2aGUwXg!OT1MN*CSWx z3oEe;rqk_7oJs1c3^Ew+#bgiMZ7>$1-+%Qf9~D#X+OWp1BG=TCik10_ZX>0uwi~~E z9IE^}=4Dl*8bWC5p;79c2A!f=%8f%(MS(HNZak0)Npy}H!nMMA#TOHlW2eEWJwy#% zd!6`QMvPQt9`U#$z`P7MqAMYh9AUt?$Zb4_{6WuRoN$j+4R_y|gP?#TneNlMEK=ji z*aCkg*Qw*Dr>5AL&Wv1zc$4c`Keh(Wm*qh<6R917br5XnqDIOAfoKD!UB6p#I{7f? z;k0@0dOlfQYwSUZkh^MjRyTOd^~U`@_ilY*bSs6Fx^4=Jm6-2CVz^)0#4U*g{1Xy< zu)=h-C=FWRy5>)zvzFO{N@==mP7-+xkZ~k#6NUbg`GXm5+7%g%2y{*;ipdnkgT%Iy zgadYWxuk{^VMb+ab?j3j!FuK2YWPNVr<|^9rv4SY3HmyUQ@X=DZkc$1G@wU@6mFN}%;(e}KFdOB`>1Kf3Ns!a>PLtt6*t|Em1#c&! zkPFpwz=~=pm1C5P{3ayR;>(ifF^W!fq#}|CJ3rt+^n1XG=mE|)-dnKbgV&sFKdexO zyawO&%L;PJ+0srw8sNm{93cl%&P@A6o$H9j83ZWk{Lr#tV2Rx}6|l5VwfNIqz(Slu zZeW80QP{c2BcW^~bu21^gXNV|02lc1DCKGye7e(~aJ^@BMRBDaiGazSB@4bOf*SwC1_Hnfvu+$~N25!cdecy{ACN?tO@sS>MRyPU772}wE8o1S zaA(Q=p5K&kspJE)P|=kF4Aiv~gvv2;B#KHuzX?U-1I)*v*@!pVZ-8&@Qt!K54}OA% z60>`z^fe{J&x!=RTjS*9x!ZO(-qc?qVm|sw0N2w4uJJNS{BvJivRg(H3KR;#;8yv} zKpo5aj`A@0Em5eKX;6jK>N#*ir)wU#f0LX!@Q!)2JX3E6%kE{sNpFKx(X6jSf!NI? zo$+&sac^{;k7|LRpxD6F5=!#O0t&X=L;LR8r&_}kcb}Jbl|qSg-DDvpT3Ywa^Bk}7 zAVG$QyaB?7Yk1t<5J*X{qA|CdiK&79UTL~j!PrPwM*&FotZ|4e{u4V5Wv%4XoR)>^ zxbBS_xL*9>OqkN~qjHnM@>hz4J*ZOmw39jbRfat>9)lV{Mu^ocP!1FleVvOdoX_ye zS>9{YTr;Ga@TIuS9VJ!^t%jAHLmnb4?^Y?UF80qoDven8A;%EiH3PSD(aiMtJS_`v2EPMQRvGdxv-2!{8Djo2}JIg{18b< z&lv8-TJFm=myke?v8bj8G0Cfg!A;H2M0dPKY4&x<1fMiZ(Y44kq+%nL0zK-S1y}>C zy(dI(dE>K%N$NheqvpaqN8jiOg?chh{AJmgGINJK$U0rX3$616HoR)E;Ly`Gv1R)O__EMj!7^J4+itf`CM4Rr z9VOzUl1!4$vYv;$EIoDC+x#iz_TA4idtc7@(dgH%fYE&tyVo1z>FQ%#8Gx;_hJpsH z3bCq7b?sjx|1&99Juzvf)B}OiR6J|A4u@K}K8HCnZk}I<32>2a*b+ZyqVi9LmLiVW zP`a{$PXYWtywjl0Wd$7E`bIpcG9BKxa*UvC;%O(sd{F5gm0d6YMM0GbnGt<8zzLDE z!HFrM0vlA!HIBNC)EE2y)|AJGhg6L>XQ=<9-(d?YR~N8)lCV5mdH8A@!?UPralOKS z8RvlFq2=iSY%)HG)_5&nDoiXS$o4KL?>z4w_V6ZeW{K z{Rg1>55xCF)zP~4iSULrIYwQRc+$C^{)!h|V$BpJ&fM30$p2i{78t^nVlHu~qMHQc zX!>0kzcs1HTtYfQAjuR~hj@88YZ&` z`(2&aN4>Atk1iGM?yN+)(p+>$z1fDb@z`4f=xYfgEp$?A+>{M@(Gl>|ZxG0;TSxLJ zPl|vsg)Wh~R`!B624rg$^!#8&A*Kd9Ck#p56mf>SakFGF32S|96{1v_VfX8G+<$Pk ztp=ZGWSU?fo+sA~G7iswy#CIHXD|8iR?yx#FDqeFI!Pt^)_%XHYbOM>1Cv?0P}cRb zP(N8q|6*~!c{Sz+);B}LT)Ebnywrk$Q*(7-E~0v%;FjQ%L(Q1Yx@M3}k|2~mm@U-LzjvFA2m zj33nuQUbpr2#(^?nZm0CiTpbC>&7lN_W4^oGZ%;J??^0=zIP>g)l&#dSKIRJJ}TUb z^A%*fS+s5Y-gcI_^1p=UXu;f2_`L1*CH_DJ18+VlRlc2|x9#GXQqwk^o9XP@u1L;H zXFf=bs0!Zi`{5gj#E2Pzno=fz^?76RuG~LZkqVoSUUGQ<_nu9n33502w$KWfC@hY@ z5k+c9*~fgin9Nkz-M>G88g)N=2ME0QfFaRCi$oKrAKe`=z3ZW|g1OZ;3G2KHs%7w* z`+QW(vs$M?Ci=PvcJ)rzZTbZIv|x1U{Zn z?mx&y|NGumqKU80AvPPk>iXq{Hdyhg%73>3OV5g$#Rf-+XQc$ajZB#A?FL=(IJ-BY;*Sfb$!fv^ZoUq~DQ zi(jU2-x>VDIi}uHY}#JkKd?k=1WV_$$M$Ov*8FQ9nugg3F=`+B)|PCdmY=pj+!flV zXvl77i-OND43r$b0)L$G4{C9E>cT>Skv_zQzct&dOBUp0ad~YM$YL|>B!fUBs6A_3 z6Kwy|rR&a?8TYdQ@aYB4c4MNd(8n?pAQZ#(s~CoRVRZ=+Oxg1N zF7D}(sm+4F0jXRts4uz9`j-b*av+tBXG`0#PB)%T4UjM*h`y)5&~&wz3fa7HYA_g= z=Ou%t@56(C!a^-d7bctiT|e_hgp>=V*)Fky{zH7if5kUcmb?NGaQvmHnP$fE0I z`nR#sAp18f?9Z_GsQ=#u{tf%XY+sb;gERJX;A7}xA9sh=r(Dk3P)!2c!$DlKV^uT1 zdpH(iR>U0hhtEIcO#3-;ga@_t;cp?ftwvmOU9Xq6=8qJQ{tf)+WlROt&yf65#;Nku zQ#ZpVx-xaLcmO#miJUd5Nc^t6(Dr413@{7gL=F1OR@F= z;r*#}2GF%G6{&>uhF>MF$A_~Xv`r{LlEq&D@+b$ke6hLzh>Veg@L;PyuVorq7)suTy zuN<%HaaZ^Un;b`Op#jNlt((NT+UEuoEKk51RTcTUCEHr;gyrt}>bNOEc8k^%z*3@; z{zRX`$!C-0L7{UF8E}yI2`crUoVF)!wmh45RG~t7)?4B^(@#Ej*$T_|s;ndw_;n<; zWs$VMVU#Y>S;`kaHOL;TRxj9T^Fr&!k-{(LjfU(PqA~42Nj!Ks%L_HwREP^*l&oRH zZN%Ji-Gck`1NSvouc&Zn^~VI@>pHueH$l~z9o8Db@oRN-;ATDhFeD)t8a+2Wc&z&8UzGQw+M$xGmY8D>>Tk)w zD5M-~6A(JX?g0n?qey%mh95ic_xM()>&LAJ;S=rOEprmcZ2YcQOcH$02hu+;?yPE? zvTZhx6dmO@8C_+4%VNI`uN`_4^IWUD@HCJZ0x0|R-2C(!nyOMc%b`TP@FD)d4|dWn z+7YwNagYEpG;HnyIR8pGzO4|r^^W{=%k>kp^pl(@RAs9Ths#YYBx-QmsqhHceQY!s z*&~mAx zft-We9EXY)d&Vs>SZ>z|Ny;|hhYQHT44`<^NL9~i>2kgwPh6!K49!8y&k%0$mGw00 z*>(?m{Tgx=WDS@Zdte$_AlGY-3gilFqR#E{LW0a3g5Dz+X_Z&kCT3a1=|D)3ro;*b z^m{}!3-tGZimD2#u^ClO(~t^)OFoVOtVC->YXhyd*Hs1C&_4x8WXt2rB7aRks{j6s zPE)=Q?oxF@+~pi?Iwf%wQ?E4tCjNV=!O2VIUua*Gybqc0c!65;70K$`j3?mNvfxp# zBf#9^AW2im&Ex9&*MP&6L5=0~+su;<@y^m4xXi&Z7IyZS^RaIU9?;$626>~tW!H0* z{9H8;Q6Xr!7HzZ9MEEre7T*Ux4BCtDU;2jA=dj*Gw#32ZC9n5;k~oJveU>`pAH^m9 zJFKNl2k5IouG3uoJDqVzbOGJO?~TpLY!p7=x*X64U~nglvZ_~=HY>t;IFgf)x&+*6 zfeS*c&|eG4q(tWGty#qoxygUW^n%|Sd=nz%vO4B5pV-b?yqacKHmpiv$2<3!N6heH zQKPhkb}46;9vke6_nBxn-E2H|Qm7q{sOhticZfvi0pbTy+wO|JIb}fa7!|w5e$-xd za&|$Fyb5uDi;^xsKMJBDu&j#{Gd4;#6F2Y+OX$*uWPBGyMPFK% z_AR#;W#-|pRyulDi^HT3Q-!C4=yyx%mwWZ(nDVkkynBds2Boj*Firs`N@%<)_`ni;%N zew=M(77sY{?>&lONzP93SVMiQ2(U%zv@OXnTAHoe*AJSL^N|i*It*xEt2vI&QTC*K zrPu-#))ti5MFc+co@ci>G|>&XlMNC(-4_u)M!uF<*nO21czrQ&)OuDv^*-uql>B(_ z*K&*y{$qujB1j>T4p|Lt)*aH2R#4b$zt6=gA)tyNQ6#wir{{3ooPSTxQ6;@s<0+n= z84}(qMNd0n=A4gNI5HjBaDp_^SkY~kS9Ux$oKHf~a@i_%U{UE}lo z4#69QT`tSgo5csrOE_)3bVU4yjV2sks|ZHWDXRQqYYhV@OcznZ1&q4yLO~+2bNzXI zykcN&Kvh5m(8NU1rK)S1S_Co|XBdD-xzLxM)b>pS#-WJ zsa-j)gKOhWkL{zev~G04n>ljoTF9w=iLT+*b^ZHZ3bu7 zEAm#@VGdE(d-I`5@;@N2ZB)k5xR!b)-_29DVU(nNB9BY4sWAU#n@!C!T(*k_2Z$G2 z@_Wx9fC4FWmL= z2EO3$jvJ9ntx|~SlJ}dz-{33QCjsE@|3cO0mQ`YSH3KI=V(_f}

sV50$ifgq)IVP(tOm|5K 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 literal 44972 zcmXuK19WD;^FLm@-P-Newz0KscWbv#ZQHhO^Qmpy*t%QW`tSSm`~K(LbCZ*EGnr)O zHA(Iy%2MLu#dRPc8e+nV>WW;l>HqSK#bW!&YH@>-iTmPJ0Y}^?c}#gq5Gc%`alk(S z_dgnztXU@s2(C|U$bFOVB+}H7B4F;n%p2)Sm^NIgOZHI&*P72!6G3e7ex75`zN6EGFQy)u|F`=Z7gnfF8?w5FSu3mNNM>hHTH&E9fnq15^a0J|B67-yHp3nOc`jo zG~2+CZKxRkW5i}tikP3D-&wzhn7<1_%y>)BYzJmh4)O-`y8%zIA2I(3FLE7D$n2A& z>tB6Ev;UgE1BWDP2ark{UGU6WntgxInt;N@kZ~s#rU_);yJ5%1yZKbfC5<+xQ!oqPJq|0V53f}2QYo*>mhW=_cUdm+DCzt(7w|wL*4XSn zf*Ov-Bun~L|NVXKcm3!3`_rd4ugMQFnu47lfe=FkvKrOnFvYFrV83vr0fCa>!XDUJ zK}28=uOher8Z?WG6^e=dMJzxLLDqzySO7(0Ia$vW0)g&SDL9%ekYPJnVl5v=zq}uOdyt#6lop%c8T!dkbRkcyU z5qUXZyRzws0qCebxowfeY?naQ_%GGKMi$2X0nbG7Sv5qLN+cne97Xukfzk{ouT5uYBvf7vYeVM*X?<|P5Gx}d;51!^JW@%b7yDg`S;}&!*{Rm z_0F^HwuGek2vWyRx6AcssLaQK9xQGn7>h7cg^ctQYq6WqR+&n(hCgQRS9W!ppn1|P zYB*h{*3hIU3YTTlG@ShyuPMCoJf&wCK^sE=IdZIcFxm{^3l6nM-9BT$QX>V4ufHO%MC|{qrZR^1<>pL5$w109k7c znN*~;TbwZH6#qR)=kqtg`{4(;P+D)F6@W6OX5ycz0CQRZ*7ZQZK~LSemp-TO^VP5W z>?u{Hlo{8Rol7IU$u-?k?JQHE6NcAxS*DY(xnD!fqk0C-hE-Fw5$_}okXPeBF3f5+ zRasK)=JGbvzeChk)O?pOA^_&yY7hT?vMi6~#ja*!J)?TAk7hmdhPByY)Z}Q&yX~wq zeB3Ckx_(+38ROatSB0+uEQ_Q)f#o%xQI|4Rz#!xXwh(MK`E3FdmN+`9qx;pYG^iI# zr?96`)?NWRIiJ0=w4*?vvDcH`CR#lo%qH+VaU3C<1Fhc7fcNy9M*QT^=Z!HSfvg?i zDYf1#Y2|ABc}Scz2nu1i{`Resmi=C-ew*ERS^2LEuIsLwKnIca_uglZ+0E09_aRp+ z_FCc*yv?WR=}fgyU=40aZ%u+_BD!OtS@eJ0oCPS0VW69bX@0ilsbP3AC=uhD~n zsC#E^e9CpfH7@9>TEi@39mr}+`;R}z89_6z{6<>7{^%2vahbS7jBy$FKXWFvwxX=j zicSD5S$UyTs%&z(Ao4{6c(vdiHzgB`Z~iQKTx;PFGuv)**t0ZdKjg0ZNk)@#D;r(K z&#X$G5GbZYA6D2#>9V5DJJTDmc4efIPylE(F)vG- zavy29kJ*j|@KT>}>@v85mc?20}vNex}(+)Snb!u6G^s@^8Vgm-(2Mn0%PzkDQD%rzPx-M{-BUb$*Z{S zHU~PyhJ9;Og1A4crhP?JwLWiNZ-4o;KJR#4=WKdicmJ39_j>Qv&sg8_s_Xr8@3r$M z>+oi~sorTVaDa(Q778t7T+}d@M=2dar_g9e%y3P72~f9T2p>r`weDJI)OIW@tC|Zi zKhCo8qJY8}9Lf)jjPRs{3NbWN#F0g(2olutXHR$j1W0zz{pWKdRQzTENvI?u0h|8J0E1k{$5WfZ=kOp3wfrD{PWLjlVzg;{UiAD@B$ zrv{1tMvb|$@;h-&+>tCoseNt3vej!xUjghfAMgA7O<;X;`~QgVD);uqySLY_`0eY8 z1Wi%t6@mj)t)tnZWZN87`j0;kJv`GOUd>-!noVM~UFG&?Zi<_4C`(Hm{|RYn=`@(D z$GRDqioePSq;ovmh*4B+`_nn$(dA|{ZrG<-au z-RCeYprbI~@4+a-V&e^9=tyKzESKKZw-?VVvu|HW;2?5YAjDHXE*afO+%^+gMBFz%cF+L0`2(ksk zCi^Dvl79Ms=pkLTvBUWpXaNecclfV_HZII&6Soo2nUw~3j`$4g<47bKzmLB6d7N6J ze@*zZTQC0l#ti-coyUJE?>YDEea97icW0HY)fksH#MgVK?{|r(l9yXx!cvvJzc>5d%vl&nP=C z$J{aw5X|jwIqTLbOlw!s_;I8?r6UKE*x}be)407k1{!HbrwAK0p+}f=w6jaBI1;=8 z_>u{lT&Ua9x`}2OE6URjC}DThoFNE^<=uA(O-p{UR-D-yM`Gc5@A7D;=~XWtMRPk_QwQXyb ze42EOxSg3#o3tbt_77+BM;LGhmCK)Wir&f)o9uhhuMbbk5H;Pu>nV%5@? zx2#Eq!z&mPx^#-Af@1U2WpZX)Zd*QGUo~wR6Mfy)lzr@K8AzHbT_`ts5aXRSv>aC) zf7xuAJRLAJZ7~nh^G0(c)yYZlMmZI#w2AnZmFQD`Z zD-nb%Le)sXpn0FHKUS48f|cD?BQt+>i*mYNxcoWy^ek{U_jq(8i4`?GaHk*+s6Q|) znPgxd3vH1?6_%yMXOwpdoHNw{)^P!~puH9eBVoINh#^6qYMq0#?|qHtpyuF(EEcP@ z+p+Fjq@Jjl*LJgqZjj$&KUrgfv~$c-(1??!b`3L@g^(QO30wYv@RNNg;YeRPZeKZi zF#i@gF!HonI%En>F8Yod#2lr(;rU)LMjC(g@37>>03JOx=7MqC-^^MfU4%cP(Cr$L z-}cqszn}m~u?#UH`ubx(aMK8a|LYC@SCy*+C>LfNvGErl-^2x5~XiL2iexiMoqE(c_4x;EBy5b8= z&-(ca4-iLf5qmM2NqzldwD1cBCY;Y|6sMC^$&(NsEljMW2Ec#WoKqNiCg8lU`D}wweGt@BJRt>bkH6w*>3&MhMuv z-1a)`YY(H^)fS_og|#>u2?sI@V=ulYJ27xlaB`Q9RKL{owcN&uvDG8{x#M~~e;)(1 zuuBcDu-;a;y%Kx-;<94BML7AUoK1FdV#$$-$Ig=-U(4cP`7)2=4E3B$k5Z%7lognU z{i75A3onps6^dyA>WBBto;^czV%fw{#E>)zCRFZ=`jUvK>~lVY`0DN!3_EIS7Xl>2 z%D2KfpI5(L&u|Z~ci@jc$tY3X`MF^2Mk8q!?kb^*8jCdA$uk_B)x>&!v+VKYICfs& za*djjW9S;|-YZV$i%BrE-RhEKsyRt*J22Z~1lilXe z?#VSKIVakmsgr=5q^1mt{#OHqnS0%^Il*GA%cuLFQA6(*y7&*7Xhz!TMh_3+Vlf=i zTI!Cxu7~O)X6tO@2NyVpr%cw8nbOjTLLQam`>ax)4z7YDV5qc>mg7ed$=;#ALQp@bb=M?V%}RNtFD6>{!}Mq&5^$&T-ial+rj76WPv zz7_0Q?4wj~V{#5zeOSIl~Tdv(B7Iz}Mc$b^lp z&ql$PYS8RBH!Fag&$itK3VZ8MVYQP#@o&L}>8sRgxO(Tho#BiL3bOj%=3VZ=0(&c9 zjf{hN3LctOwumih0l3W)Z3=M>wZ-i;TI27y^-tTh1c&?RHFH`HjLm|pX}ORme!=FA*~!T=CCv6DW5xoMaNlZ&xqe&P7Nvx| z5bB&_Sa;F|4L#~K_bEMlz3D9_#G_d=J_7n*OsI;H%@me( zZQ1xS`$C5jch_N}7JwYIl21U(_e9Mf33zNM8#rziuU#FE(sEn*es3G3SO4&ZH}no8 z&yZfe9lA@53ox5`43=cvztlL;Bx4D?hA>oM5+^A-WoHN$hBHj{mW@s?8NQ$MTL>O( z9XmqW2|_E&crff67k+0wU(Y`rO(1dO2ZzgtlP}XQT#8waN#C3%?)7MBhmC)kt3qsg z9y&3Qz4OHZ3Y@y;Exj*+AzyEQTAf@$qeySFMpbSi-YVeiCAv=`mWE&|B=Mlq1i7|v zbf&*g#V-^n3snjrLF*lpVLFf*na(z4KS-Xc6EM7F#JWw{x-I3FJPBzJHr^s}UjNP; z_d9IAE@3av$ex~iuYD_tRo*Y~bwWucqX*~}F9Xglly5}mdOUia&wt*~8nhlc+@R*M zLOZfWRl}Sx5hr)xEY8KtR2exf&IoY`j7E^CXbDa}HE{izLMt-$acg1&fp#Hk35N z5YNn=^|##O-~iuQ61%$<{7_r7M1rJ;8NjZcn8*JIwlCv^HPwr+wDzCP@tU4|XDIKg z#8WDV_-V)f^p0URx4B!O8eOg|fJs$>#e@{9Cn>|Z3Uk)oi&93}68|;Cj$b6577_WJ zOmF3&nyNSn>ZU$tnI*83&Eb)-)Uo)vrPHwHF_o~tSN8@NHw;r%X}!|UFD7x87PPdA zN8aolFTRV#)Te5=3}IO~j!SljS*ahaHlUR2N0tz+eLSlgL5UT*<=6KiZwXGP(BwCO z%R)qfTxirkaiZmL#wFAF)Qn5U z*SHiZ6Ctj}HPbD7!u=$}gD6T?D4^$#UZR~AfE4sOF0>R7zt}PMi34p>yJpW{DY2%4 z`ObZdWv#tR>CJ>4_9L38LMTLwv2LHL9OzL0h{Q$A{Kzb8zW>n^$REz&b<}{E^lQe4 zb)AQRtf5nI2x6VCJm8)>gW^i_45XN|65IG0*MIZ@6T_I%NUmP&(q37qx@l+-j2W+S zapmpk%X?5Z9s}xaltu*>yOz#prg*<^@*)@I+X5RG{p6RxSThG0xKux<3aarBydP4u z>kMJsyXp3L9SEgbB%+czX+8AW@8d)e$Tc6U6KC>tkHKNZtqkX0M^voI~n@P2!%KR7zW~e8D60t&H7nEN<*GPNZcQ>w%j(J7mZ37GU?zhXWEw^Zq zTcu>9*aUzRYl6>LR*Q_)4lVe>9K)JbYiG8}+Uc%vhQlm=%wtHFgu=o)!Qk`JKW&qJ zWU;d;XS|Fv&_LMSq)!6YTqX#k_Jl(hhaMUpV5VBZb<5%GNaa!JNP6;^lBc+7JH}H>$Rk2 zM$3itJkm=+86SWyMUeIPq6|ofjg~B9xvcC4ic}(yH*5Rx^B+7^mqbkbgJS?b5#g3U z_MuNl1c}H0Y_EIdQ&O=7iNKW{_L*YG_fC^+Ba9F)CLCPAG>qQy`gM8C8fb%Kd0+K> zh{Q|gmwVmq6n|2;uWHa?nN@*~%q>(x3gKCDv%lwH)s3u{p?}VIyZ$rDJ1?|_{x?JT zz)snd#`ShhmzPJtY|I!^Q@IUZk2yFawToRND+5Dx3Xba<2pw4B8BtARaHq|~z3G^% zjy}vvdWS7BN1Nt{hI$*3fGJ`B!1uENVZ3gySE?OJvS~wSa+11Chc27jp~FSes&Edh zDBXusf0FrKHCCqgsNOrn_-E0g-&mdhwz_;#{r>zv*?v{7uk_|Z9k zRAL{luPaL#{SF9%XGAm%j~ZJ{{HYQ-E`TC)Zn;YRzrh}AYyTOTkZoB?ktncqu~x9- z6dePpNGXMykvOz}7@^Tm?r*ZW!_b85){Y6S4Y-x?_M%lH6HnwA5gA}j^UF`Q*I!f+G zSSqaiIoS`AX#2+0DjYHQP;U1ni*-B$miPAid;O!U#m;!uy&n}-#}r$waX2|>P}jd_O?5Qs{R1p>aa;Vre@lJ#^HA zI2+$ZjzH1CfY!}my({?-Zz_jZ=A4dFKtWRTFMFpj=Y^V^HU7h>k^E!;T zIOexHIs-!fiGPt~F|HJEi31(uQHEGq#nL}@z81fD63xYwzvV^PP(@n_YK z8#Q8!XTB2trwqM+2rwc&5H5<}WzTfgkuq!0|GZON$0oIWQQW`dJm)F!QYlhUgWi~n zEa2}*XUAsb{HFd>JK6uEu(fW9g{nL8J(QxgLECl z*?#*8Grzr36vt2*HeP#jZH9KMF!yf-7*2hO*yzwqC5GpFk8Z2zX^7x@a8?44 z|H`k|uavdYTsOs=Zu}L1_=L#FP&b>Se0HoyfumOfKQf6?GPL5HRHnOMMH$ub#D;y_ zDh`X!Xs3BV*L`6z*ee;5o^llFrR5mKX}?pZ-g@pY7*YK=5`8rEu;m>j2~B14>d`sb zar7dX01d*V=a_!7(6B(f*_5_^2-(Hsqj6TD+gSvAP~PwVjA-x8pwFOtT5-6=jxZ9D zO30IcUNrltn9nPZ@LI3e-XNnxzmgP_J$83k}>)*DxD~#!jh3OOL;-^^=_(TFO z-+q<2%(Tj-_^=u)O)B$!bVbJILPRc7Ko~A9C!K^Jmc-SX-7C&E#0TJpf)nLaL^UWq z+|S<^#ZEw1tW*_L-KI@d19QYL~$ z%I!CGI+Z3v*Mh=O7`lL;3jLf2LDG5rKcycMS)d$NHc(yAt?56f&&stk*82ktm6!zX z;?3_>OljEhMz(Im$n(k#!0l+Xo$nUW)kDeYPV0CDQRL9+u(&>hJH5azkD`OJNZg~Q zi6nHbbWscw6oH$ChZ)~zilCym>J}W}UDQx?&d1+6I$t^IZKhQsg6>UD79Q}lPCNOv z;S_Kw@DgvZuFnt~lLXL%XuN1j~?6{|BcP-`?0q;zpSU9X)aRdftTpV!E-)(zx4}C0BJ|#gD&)}?G=PS0Z~v0 zWEg~t0=o|v1U4)=8NL)5Wnh_1ql0DS^yS-%QtV3lZ5PD-3ye~U85Jx0Ay ziw$2wh`-SZ2_jPC7S4&D!J|wUCEOfbvK2+MEd{O+Asm11URrt%-og&bXWHf6d%Euu z%FoN=_epi^ffv@RM&$#TAk$G1;734DnP_iS+`-v;c;aXMDxrz1e)UiWt6)_I%OzOc zK0Wn-GkHV)?yEsowQKKEqU2+AtPP~{;UhV6e4XQ>fcH;Me!rJW7zG!&eQ^SnWD5o# zgWKh<!|q_qY)zYUxA|W4vDswU6CYZdR@%?QM1H2vXM))y|FB|LxriK*rks3)hgh1Z zC&!2C|4m*HT%JFjA*>Ww$ME3j5`atLVM}8?sE7og+oM3o9`hCdpWn3Un(vhm2kPVXg%-iwYcqSmWb%~XF zf2EzQB)(2%I~rQoT$i301iup7M9mnCIEN_E2XaWSmLCdf zx$G2P8H%AXrvrqTU{$SE_UR=IiMD0U=zI=-f{WkMCN7>NThO{&z_N7x=lRAW7V*en zJMxYG4R&*(vxdI*;p@tW1#p}3Cpcd ziBQ)}rkYDk^k?}LeMR0n!g`eSV^xFGIcXeN(CiEG!m;D6MyXr$H&F%i1oQb(eJQVp zv<@nXdQ=U)7yA`h1JY0>8>CJxrs;p9@RSV{KBF3~BQdoT!?pi%BTwO*?0Ob|>&xrC z&5?RfVsZ4Dsl@zyHT6)G?F;YTX>xl+Y;sD+p*4)3mTQsOjvm(=AEnUe6mdsPwu)hH z-{P!q+ar0)&l6Uf?Fkv^gDCyZW}p*L9LQ0R8R-bejUT^=%#}Ai>Wi1ExclRAwj4Fd zzWLMBeu4g~>CV_U!#{RNTU&C0`lqtsBl@TZUI5eeBMu8SYP`1kRDO6yRQrY9Rv2CH zG&HF$J&oP+BuX)AVJ-f-X?VBqLYuOv|6he96&bjwlq9)}t$Z+X0+kjZ8e@PE^|D0n z;WyKD{|irm>v|(}X%(&e_ExNSyJrlk#mHvAgN5kdq`&sPZM|6Mfv-#$nXGY96Wdxh zh|8IdM~yyzXR4D;d%(2vTMK26;)hO;YCYY5br?mL<*&^!H)_?wT&An#a$6tLv>c!x4932lb~jSRs7LRqsL~fD^Mi9d z)T5O+yMY7LQisSXprHTk+&x!A!aEo zT2q%u1R4kv{*XT9a`<4wjUl+KDlcNg1(POh3Dm5k02P74Y7SP;3yje~V8cB5c_!U^fUF!SbE+&mqBhjc2#T}LzX1J>4i(|1 z-+Uo}*X#=(ZO2mo8OsiGVV#_ctGzl|_>F4lrpR~%iD9!^d@selLoamW5f(V()q(~~ zWlDj2jG#F0LUQRQ$NN+K@)~*4mAIXV`r5r8D<>6{a@8ZGk|<9R7WfyprKbi;0r0VU zJ?RP*4R?Ig?v3ZLSYYFCul<#Z#OM&2^bA0y!Ys>x#CMd+3y9~k3;HY+;u_)b3f3Ju zBHLK)WYXyu>g;P9^c!X$@WiKo7w5591Yz6UR_9S;f zxQI4fk>tkxUbOR(h7m^7-P^_~Eaa6)qKl5q{2V-zr-RxrI{2~1iPHL)|Xwo)y2`^Fpp%QKQ zW9hQ-*lwVi6Yk<;cqG9Mo7XKY@+E3`Yq(iIJtpc?V6zzP{9G50Nhuhk{w#F(pu2ZR z0ZNLoTl4|M5+ngruH28XJ?^5gh{4}Lv6-3{*}%0xN?(Mv2;(Rj`L@nEJuVk1+6np! z#+4o}dUtDeMz=1P2Q3s6B<2@<)FZhal^i+AsMuvOfK657_~|v(*oUx*{@#_ziqDS* z8!shuq9;HI2YiFYJKi>XXmMtp#;x4_PS!rV7sf0Z4L}^ZvEJc5>LZ#EiDZH?*-#@s zqv9l}%hbb9jpfqUIo5Ft>00%RkV48ZfOvw6k^+!P3qPDFL&Xe_MUhC$q+U#w!%Ea5 zmW_*J2&4`u^jD{p7_$w>4|OF={{XkIHpWql zK>K9db$m5O52@}5zeAZ`-Aq=@Db&EpJI0CsbIgqo2r7wXE{NPn$JOnFHw}8164rxV z;su}6*o#!$zvPD5h*PwYZGb57uKxiBA1yXUQh?UygtlKf!irh2T7t_|hEhw4!H!Q5^$kJb9xSNDpQ-wp9fk*yTKT{Vp{tb0j_c zdLPE(7EMZG+Lm`Cl#@u2(c`6;T;-IyMoB_+b9tALsc#&tqPOyRJXRx3Wl7<=x=Rhy zbZUq5P6qA`3WUAuPiqoKzI|>UQzrV=C57yx`o2>%>p)~fxinaxNvX~nw{Xi7j8@1J zxZy2kanNDgqG-jF$(krYne`~lS0R(*{#rAbAA@E)HR&Dzu!NWvj35uTN8L z!F0+rVnYtNs359gU37X^_>nId;v^#oKA)epCs^Yb_yP{uLlF%k!nPM*PJ?Z6n!%M8 zkw!lmi*Y5v5=v;2&$w}gr_U6nPu*$%fjxu*GCwwTfR!~@ISc_#wF76AA^d5`&41x{ z_7#%%$%3TPure;u922T^uE0${#zUuLC*i|wF~yKlfy}TDEZwcpd$4fhV#5k}qQ;40 zT`jJSas%OkWuWn+s&s`QM~QVqX_UJ;;03KMy9MPUTyryIV;3#iwqH{#MeGv5ypy4@ zYFrN$VJ3e%?A|_>!YDf2-pp|1EIX{Q2b7@iwvBMo!6YA~pq}~{+re_7Ej25@><2Mv zQmpsDD*Q0Y*x*rBME9Og$YY$)2Avn9j$nrCNIUG_N8g7zD*3fKOV3 za^!Su6X2nXJ5S*zuTWrsjjpGAW3tq;YB!p~XTgz2tcxnaFH?=ju&;_m`U0yt9U_Sq7nsz14n*WuHwx|w(3C-tVl|_?DDiJ?vhb9Xx z4pmY4x8a9HJI{W_be@g$aoOiM>;@QWGL_sThOK+KWQi`egw#4@$|qwwmti7i<4@N| zS_Vi{b1aeH1oy7W2Q=|Z|GYhf6dc$s4SP)-hXwVV#Zh?lreRyeyvCI2Ve$SuS73HW z9gkLWU*D7Lks@8vMz52(>!HQeZBVMngJ>NZ2|d&rpCuO~$8&YS}V9F!-Swc=!@5EL5Q>I#c1% zpg-|w89u>FI1eaHh1;wXz6S$Bk~c6iEAg1!&{FdQjwZHfB1R3{W3eK_6gv@qAFKiL zl93~t+$*^KDZIR?YJ*DvSm6U&7H5;gze`i}khY z-Oksi_1tyBk)vbvz|BEg<{{^RV=|1(ma22=hq{|PWo{u_TA2&O9SI8Y_yDuKCc>~% z@Dr@^l*wQnGkBzY1{`OEESSV(Pb)gVY)aNQ;VkYF{>`xIK0Qq9K}>^Wf~E?S217o_ znEKJ~<^iE_31H~4hR>MJp!OrI(4hFC;{vEQ{p$XL*q_L;IaCgHRfIO7I=-(5Qv{=% zFecGv)I~y(rNg}jhtW&CQBl#`)svsRFd!Hr(x9A)HShi-tzBm`5S5@BB8rj`1Qm+2 z+b5{ffNoh0Z)D;~#)q6*btqYxIOBXjsfqqiULI%(Z39kD z0Dy`BjX`RPjORy|BF*SvahGKfti~=&yKZgYdzhJ$Rm^RyRC4Wg4CR8DJ4{J4WeLZc zd~!u{xmfKSxywARjt^m{5;Ma=h0ID`V8_08W_dIY99%d#u8v-NiFmR454OUJ00+~& zqko~3&PHokq!z+o%6}g%Kcm4tGZ0|+xE+RP|AMyfAhKBcJq6m{O_V1?WI!PZFmm#e ztcLn8BxSxL=ETMuL8cg;IjjVt)atYCmU4x?$3HdJz~7vJI^=~pm-kPUIR)0`3M=cU zg%kn4JS)~QYVGbTRmE}&)3&l@UaGA>eL_p~dia+W{>=Tmd~k?qd>)YL!@yqmVFV4~ z*b3C2_e1C_A@g3a-3m9#0oJ{dxkk?a8mk%*!9c+~tzTI%26x9CTrb;(Qp?vndMADB zD2R}I60-=Y33%Qx3hoe3)s|O{*oZHWI*J5v$n76_kExIUaynd(V&YwR4J*o`sUWO+ z1**9LKF6W7{OA!7}lU^xMWMBiBwmV?X!smvg*wChOjpm?eD<>8sp(f(GZYzn481FPo2`FXLKq3c_)y*qpn->YsBq|9n~Az zdx!Y`N~e4|gR=!};2J6C>EBL~a2ezSBd#2yhPPL-u{`myU>f(i2KwVi0DvdHcRpva z#{y>R8&2yfcd%N4XY3B%w2;zRUqkx|z$0_p{?w~0KFEkFjFcz!FY0T7N^)cjbF-@w z0tF#ytjzgaR|vDJ|HS+UDx$)WcSeu4;8drXDO=X#IhsiPjEH?ebK{mcycq8+=;Dux z7V3jVb$cpqPO_seLYQai*Jz8e503BTC+klz9+7!?s{Q({)q>ihvX`H#a8PjlgfO2> z9HHYEsE}>Ei3c?(`P*35KVh>-V_;Hhm25tFlyC_V)Lig|#eTP(@i`b2k1t1t8Ax*p z2Z3P(KqovCFN>q|I_B)}tpzHIDSl50NjM+Bu5a@C;xPVIv}q{8OjYy~$f9l5z6=$f zf3@+VddQ>+TPZO3*}gR@w@<6s2M4W(V7$O6{I>ebY!y@*&jxW2|BO0?;hNAb$thnQ z<`w$1%EiF0X`GO!drtj-kdfD;0@7Pi!=3MNH{8~6S}mYa}v!~}$0 zl;6v>7A-20)GD3zAI_@!lV)=*$M${{$H^xeqkWCG@;{Gs(?_K0rxoUL5*243N$}ZD zUo^?TTpB`-LYnCu>eaE{!(xCihUw;dxiOl*2bibbp@MT+U)m0!b(-E09kp zKSKJnQekIE7&M9vCL0QgADE|*)*JKDCdSsv@E9f1@L@P3KFG~+wLo<(k(&@8TqFDv z_+#5Zy3NNtfnkKFl3!m>D}zz*UH#yZ?w#_KRRg7>KbU!rfrD%=Lg&bcPkWf#H6CUz zJeiH+zB2^6iOyscqhe%^XeM$HymbBtX$I*6Fr*k(^IypH88 zXN@zCRb1^iDXf2{5cW zYnO`WVZbd3mc_m%fzx@&gTcK*b6C(nqa(FY(QKWU8{1ZtW@(Vou7{cdEfoxB7No7h?aN+Er}js7Nl>t9zOCU=5rfgm(|HXz{7aV)aA6g*eaLb zRYze)W080;ZsFE_TfNgV6FvrZT{@g9M1>>xVYBj7oDfSXp$|93>()gel0vVXGhfJ` zb^+nwqxKMk!Gu^#RLnyNy*Pe^#?WtPl4{|ZXdw%MZX_s53hIP@xhhb6a+CBK|KBs=C2 zpVA(LCbZV2P0HforyhjWs$?sV*6@ttrZDeDEd6lFg;r1ZW$)B;v9#4x)y*nJN& z_+pmqP!Wb${Kt^;03UsSqp7uk`ini2NPOd;JbD)Rp^DWPo*7CUxaO*<>uQAUzD3DL z+nLrOw5pn5WXAB&%j|~i-OH(b+GubCm zwxw%q_m_8xJw)mTK6@qzjB!CZBB6va^c)j!Il zW#}BJh_lGXDebx<5(ReR;un!&1=~FFF=-E&X#Q&ub zDN8~=Ebb|o<)SBckk3fCpCl)NCqxuEVv(Y~7SapPSvo~36f$!~eYJNU4rqDnK1$P9 z!F(got5QPu7rOa{4CNL$s+n0a$msIXz_YXWS7({XfubLlJGf|Wwudab4!LhH03g)U zut=g++ewxqQX^zPT?j=|u0T{&+Q?tsP&4t|utI$CyKHO=8}$9QXhG3WMoDL(*JhXG z+jKRo_g@T)NepQ-6#okmCSdFc%dg>+aIqz8?6Wx~*ifF@ZCDz(4)9v}+IXwHe zmf`ANLD-r@&{Za zyNkbT_9qLhtequjYyUiy{{45NQSWnsD40mQi_~i6-%kXcz=isj*3G40z(NCqeuk0F zTzK)J{?$lCY&kV`6o#Jw!I(0flpNkdtzyne^^?3O-UJXe7*oB)C4acnxspO&wGD=D zNkP43Wvvu&8F3WzwA4PbV@%=a6ZjWSt4{gZDnMO)}nfC?_d|0oR%kCpLp7MA1K8<0M zWvAA_$;}T(T9Bp%-ieG@2!V|l)=O>S;;8Wde>{C-cqLEJ?}=^Oww;Y_b7O97Z=4fu ztc|g;ZQHhOTQ~pr-uFKJ>7425s`^z=Rd-j_j86Bs0`mu=sExXlH#7Zj|3)4+?(s%v zn{vTHk61g0ljSvU9?zWfcd ziJgfIfpOU~Awqs+EIoZ^%kyMcvEI#0s7*5}x=s^yq8IA`9x4vgFSlgD8Kh zeS$j`(BNRLM4)Y{tI#H`5*-i={MWeqEMw2&?#&U0uBCTG0_aKVm>{HG#N{v}G}Hle z*J#Pq=+W-P^NIggN#Ur3MW4K;{!66b*%=I};_A>Lzu41F*=xB(jt4P@C5TAoeQ`{6 z8fhKKK+7oM!PELHI5JU02!v|9&1CUWaPu7wRsD@X0-$q+WjZMMCd#g^tINFcvXN{*`+GWm>{C=^RF&*#DdjujXbi94ZDBRP<*(MiIyZXp-lBo1SJ} zl6ic5y=s8G^261ZK?CXv{a(47|9|Ma?bnxWs5&S>1j_Add~pXWRa_evg%uEnGYoW# z(^ltCM?>ebHH$n+>j;N)5BxMY3lK5PfJ=|to;lHh`bo1brs-nEASKYTj-T7$fn^Cx z4a!=i9LN*9d(m6D%^)vJhy2InxxnH3iHQAvBIN%hu2|Mzp7|e~A&c3;|3Icv!h4%r zvP6x;rt3ic8xX`URxLKB=g(lP@6RYO8$+jQItTjACuSrd7a3@JMz3ocE`?~~7o zw)9q|ALTs)HBcTBIb^3*1M}2~;(8vydkI^(;|^7X#ey}3N%N&yzL%0ezS1I$Q4%`D zfHn^Mgq<9%E0%u^H_fOQ`>c`5tcI{GUzOcnCfwF06^XT40ae>>fQ~-UA`pRQ4c7(x z&nEavRK8je3m6-N%c3O2p(#qqC;5=Xan3@$Elp5`*MZ^%%M<(W)Tlr zb0N-R7Z4078=V+^ScUsd<@zK}C#3_0WN02)veF-+C39V;BdDtpcWvKZDvaXw!X4p= z14$FnsT@99+n?UdJE&t9p9FlamSVV+AXtHESC53QAxv&}ab$k)LLoUwyN#!6)X9+VTkB3z>Qs_CAqULZ7f&s_a5R%o3CVx{&L#IZ|-1W`A+IUT*7P zSV#p>eAuL{RLdQ}CxTUt%Okl|q&P}EE@GO6AQRabyUEr+sNil8V~4Ryc^^nAiBY~b zM}@(T8-C9)q_ifbqqBBpV*9|*%ImA5-7j=OIs1l!z4=JJku69=mUN*)v*}xPL2fJk zwOSeZe)MtlLAA}?%FYv8*}wSqhX&VR_Atv)6znOx`}nrYGzNO7aevq)OblBI$(2X>r(~ zM$iG7mkteBU@KXC8w(y-1mPHwB>nlM%HUSXcao|W9P~O>gzAcn1H&u`Du%f5r0lY> z$h~>K`ObgKp^A3jxC3^`x|~>W@c}|fASBu`9N@4Z6tdg+GXE@W!+Vv&$;^;VKIFjz zU{Bb^Rl9@m2^bV|;Vv5ZA%vl=@mcYmr=GUde6~X{Q|9$2R0d%b%Ddo3Zum!YbK1L& zIxqpq%cvx2F>mWhrrg56zBJGx(baiK(MS~7ETEzdL`5gHCrb*H+swCS8bohq?6)CA zTqv~u0b%ROtzm?YS`x`)avvy6gMuu@=W={FgKggR>QuRTEz=29F4WOzi(AkxOHb=q z;%%_4tNy`G=34nqeOGGCr^n)+!NZ&yUQ?mRL~&!es9sK7W=8z!v`S2c_H)3d*w9GP^;o*h2OlV1ttbOWglR1jL()JgxN zEc-^2a34T|rzeV4v1EuqIYQuYQ{JNUIO%>a-&>-b95%0I2$CjIf}LkK zPv)vAH(aq1I$1nclwUBZl0Z?v|Eq>qgqdqVS2&3o`ktByWCSsHDsm{|>)Xmq#IMTt zx11u8oA6AXpS4~>vKJqH3QF`pe}Uwj+W$+is9Ad;AG|7!m-m9t|Ki)feF*9dr8zUBTq;?QGL z+MHH0c}9by-liSgY{D>GaTdNqZYi2UOtbz#~M>s zpAexmtIdP*6Ukz!D3-UA{uwc{jk;rbzsi`Yrpkv9Z7+RsMGH*Av_nBgfFk`CDPsRQ z`FT!bD76((vF^&4f*rCsiz_dWHTlAUmg4Xe8_PW|_*3;DeY&9%lko@|?eH@LJH<6> zo*cNRvk1Ls8a>WoT^0yN%F~Yasa9X{4&Y)paPjR(i1jGy6E{Gq*)i;Enfl&Tc~C@y z{`fkN%C9sVT!N=*)shjAb%pC3LNH{HT2{bhNf4H=%)M!rHsZ1>&#g4;ZB88{H`srQ zRh#{2Hq{>D{;^1X9`fsFSq>*P3iZWP(id0<`Z%jhn{*?Q)EapwwlU=l8@gAdmXzL! z-ArZv2+qI89!-xOB)0w6c^ z2*2%6eTCOOT>kCRmJY)RujEyPWw;_;ZR>it*0H=QrG~~~vC)d5EL2-|TrJlHB#Tw5 z8Fs#bCqu=NBbEzngP=K%=I%Ju%hPCQuRa7p;QTW^7pLw|Y{inFt8x9Y-w~Ib0{M3u z2_0!l!3UAt4Yv{Lwg{0o%&EeBjOedm1M$z+93k!;^wpcGY4bZmzi%ROE9$H@~FP{ zYm{PHiaz?TLLDUZVs^$^;f5_JRoI{KVx$IpCzOwfZ&*9lO--RbPI5cG#T0K=_iL~DI!qn9{d?&c zZA~#(#wQYW#wG6mitap^(w;fZBk z3ydJBv5@am9x4PYS*L2*A#jj?2#Sc+<$hKe3AJV#!i-IMIgjPCltDr`&dfZR6N{>}9kxHC97SnqS4we@ zQe}QkLo%id;4_*WxdR%W!kdCKt!EsB2AuP>>_!5ywI~lO3;6Qq@td0u$kre*Sh?nFjC z_(7oTU8PgqHzyoHn;Z_O^ZSx>S+t}_i4s6-voyuCnBYH5vMY&g_Gg3_(^NA0ayS-w zg42<4g;wb5lp@=O=$p6Cm(#viZ0dV8ZDiawLkqSbXKoOvW+$9~k%`w60@Z)G&L)tu zg4!Ejip|I4P5g~}_wEnlfTn!wh_>?u11m6B-f?`XHAQBLsaTz!VYm<|@!QR4J0EPL zacvK8K_d}s6^t-xjhr#THaPkllOBj8k0mgLR1Ux z(=|AFrO2%sH~vMi{`z1~oqLfXnGyQ(Xhs3|PQcI=S+PI_6Q&odIxBE574i$`m)7+b!H91G8% zIpZ91Q2bn~+*fkFOhTH$zui$?vkMqq;8NUbW|A~GA46n)WnGr0_QWmCe}qZ~o@nu$ zCH_jyQtFj#PB&Uh-v(jmaOOTKDH=*ls|2&mX3L<;VVlFK3gBaF(?Zg|oV@qfqY@dA z;L^#3amem|ICDiPXcZvkJyPX0Yh@&}3%!$RV}z1OW<|Ay>|rz}vA4GlJ$CSMvh%(O zmD(*e)z}(%5Ytm|;l#>s3=Z#4;#AWKrxa5GN+3SbxT}BOXB*T(#u*Xt4Qg&2p$%;X z;QLPEziiqV#XxK&yd7N_o=eW|WWD&I`@o*BTTZs^Hl^11F1^$dDbo2dJ3ma|yh+n% zcpI<_(&OJrZhPnW*?aV%duAozjJ;OM@h#neu=w|zp9@Qyn|CNiJ%8T6wfGByezceU zj3A8i74ItJwWjmnySzzVFpVY8S5Tl4v*PKSEvjwr2Oni@ZShJ+%qpPn2Iy(2>)o=S=HrTae z1$b~L7QI&BXAD~Cz&5R3@$BPI*cGfMV1=t~0+3I8O($oXz*w>Y2BF)MH8ha!s?I)Z z6J~DY4Lvk-PA)1a-P}t*yzHKj4NbUrs8dr|kYmIlPFp&jNA(bS4}(u!{5d=%UNUQ* zZ+M9+|3MF@&i)A6%NC_>`i;LI=2*||Bl?r-ao$IED(?e0u{?HyJcZ4tG>E<7B6(^D zZ+b21t=R60+c1Y2Jc@B!YJ2(`a*~QgM zB5JhgC}r%cCX%7t;J_$nzH%%c_oN@i9%EFj zJk#H(hHoPeOd4K=nZW5JIc|<=KgDX`-YPjKf84IOMX`VYCG?+_Eo&3e4?t#BFt8l zyk;pPIcT$~JRqklP=`@DujHbFm$2%MrnE`p6c7%S`X;syVXF!Ve~)y1#fbYP2u&m#$7?g6w~aKlkDuj)-S*Om5y^d;*uz zs_!rT}h)*>`e;MzkQ@C3XhSbS|pzi*j@Q~4H^j};0EanSWW~^MF1Nd z>l?n)E$e|};j}C#9_ zQXCTjo~2HLj2ca+cx;oUCyc?)gH@Oe%E{GY#`c{$?n-5=BxQ^oDw3)g7@p;uVEOJ= zTt^r#%%%=RA*@*Bah_9TG(?D_n{9L-MiYU&sI)XB6B`{hOfWn0bMTxqHUOld8j|AJrLF-dT=&$j5nlX8CC0jl%kC_YEb&t(s1D3#^$ z_#U>JA)*;a<3(lsSK=S+_0^&&1m!~!^(dC?6J*rN{CMpQ_q;zj0Y@V63ixMOg)s)o zVQ<@mm#Q>L;Xf$ho$dU|5t6kp5u(s82q+6vrD%+A(DVuc_-^Qny>osLVG(RGb>cMm zHq~cM`F|Y3z@god(R0kyKgFa*%SDX#q9LbbnG@Oug0px*JNthpNp-_Uwq<7*P>jis zuuZi@)gUS&kOXTnbB+pq+417)F^PR+&KErE02i{~qE>sYrIDe+C1oT2iN{ zqXi|7vUT{Q3_6z=3L0j;i9|+gp{b^*S7>ya09XrN~A zFL3`%1px0rbZ{oXMIH2?4-4Hn*lh%EANCk}V80e=ooQq~D7g#OIkcsCD!h|#9LCa< z3DoNm`<&|%w}p^@137`mGnt`F z<(v%E-swj%(HW_dFe-LI+E2(|KfgP%YdAzW9BEn~=o`4ua=x4z&R95OJKwLWeMW<2PPgL91fLVz)Djcfh+D+m}&&j-bpoit&ymo+-4V;nIX;v*g8y`l5Q zF%foxHaeeR0@-_JFt_3GF}r5a*0cxn)OEYZC>0n&;{-VyJ%NseI|fDV{VEPSV(C!= z`eU)VZQDhGaD7|&=?1@R?_Q$upD4hzlpRJRXf;X6sjFlzSac`)(zW*a=*vPCzE zw68XH7fBw{qD#z<`f{FSN!i$K8sG9k8hWwBU-|J2=8xRpIIKG`7RgoHX$|Keb!@{f ze;3c(c>b9hyZ3j%VElBE05n^8Q`YdsaUS}wzw5)K9@oO=dMVELddv7G&*pG>1`Zz< zrLvAD-OZXD=|8|{8#FTwT-?M6&Zisb*?L{yTzl(;jJXq|L==17#ZiqUh3I-s10OZy z-7;Oy%@;*a_K%5L16Wq*Bc*eF&xSM1=$f5@!*F?dM9_417R{@`o07ua!9NU@RmipY-L2Pz? z@KsrSRss949mQ%%GS0ii=0lDw?2V=o%IaNMHae%}jf_)CkF_$+{4tK}t7vO8mf{^?IvoBH*1&e z-9_&*Atnv8eZc9(7;+KHf$>U*&Is+gk}$aa7r`Q!KD21NV2T+_qd*-LH+p=7@dyw_ zSg5Eut{N@2l8|Y{%u_)c-dts5n=T9;TG)7>TmM(Hn!*29j??`gLJk&ln=Py@=4EGq z31KLKGr}m}<4bZYFh<+|4oTwYSA&x5zpak1HSX;^g9z_v6^-`^&!=JJFhPnGy+PQj zSEKIlqbV3q1t{+P$;Y%e21e#_i=R6KH#6!L!mBvGN$kfIDGYYBE9eoraEf>du;?T` ze^(}Kw4=xA_aO@=(0qkY;q}%8SYK@SwvLy-z?dbF)xr2S+hI7D$9c+4w733S$I`*p zHpTjLf*D37XRz%v&Qt|@3NkJp=#>n_n;h4G7O-?^b*8|8fgU-9^8oFAqI)k~_1q-+_u z9Xc~VRGpd_QB97Oy~_38k{;>tYtn1>%E;W*HXcWgADX1p4;ur#Bj?*TpQ=C0vV&sJ zJwG~>Y#DhZ&Zfz;|K76edNE^eyG$4sUVHMoxf940|GXPAV?U_X?@H6xs=!=a%<+QR zkkVxIFBA05oj3TH@E@gcDZ^N;O$^?0HM-Yychz^+6xu+=EpOm=PU_Q7L^#Lt(<^?T z!eeWt)B4_73otX6+KYLl-Vn`Ah&78n4E6af={j8)gu7;t*H{~6E%?}m$`~pn3GX!) z7^d{(aqG9u3#ZpUE4FxU!6zB4v|M!acjmF}-4Jw5v&7=YsDP3Bd1Hd=henV*kg5Em z-~G*|hU!(6icrP$sw~Q7g%J2NG-Bt043-SaGBiSvs(fV0En>|Z5?|(owdS26EoqQw zVWs!R9x5*}v@>>#tvGWt;XqyCc?GC-xy7#D7ckya5K;q=k$)zcDDiF|Dsz!i8CG?H z{`IF&v^3x(jMU@yqHkb9@OV9S-#ef<|0hBS+N0x1tRs>8&tEaxEUa+2VU}l&_hhCR zk-m@2Eq-E-{cq;Q?So$~27c@6f`6O7$4ayqV0RX?L23&$T%8XEP9-n&4cA!qvnhwU z*9><)kVS~s0KIk+NN&4uXfY=S;=bwoJ-`PoxnRsR+9a=*qe%z@Q!zet={ZFQN{ghD z^6zr}7`#|^tl89L+-K=_H8r3~4c2JzKP^JQDD?B-rk3QM&5 ziPlgNCOJjTF#KwFZTSYOjANp92_t~HBzxj62^m&ZbpW@EP`9xml2ggVVq+9CEV%F9 z19N#>{iBW^`cl)eh7mwcvIf5RwwtpqIW6eL0AeU-HE;BAeBJ zk@l>b7yIa+oW^_$Pfx1(;&gLx82t_n(E$w58B2Uh$QUfx(p*0l)$$78?f%fvfAHfh zAyWPqAr7xWo>9ODU74d&8X+F_Q~bO1_>b0d7)u@M2pDG_t*EPm1&ZgQh!N4Uo%lMN z7zT@i!H+z|+By1S#7p|T>%?mmnXN_DY71bgQAVeq7)`x~AbnmA;078j_5iXEN}1g0 zW}X+De>+>9ALf&-j46*i_~g}snO>CTO+y6VaRhO7xERvqF+0EE9l3i@f*A#j-dz1 zT?1k7{(&rp&hR2;@)yJ#zzzWA`zt@T04Wk0tU1^n6U9M#H&dLw(@UW3rF&zU%K!?V zBGNt9=HWGwFxLi^GZ%O8&BOPnmTYa#W=sr7ODegNs0m=bDU+w=#u@(u2a zFEwQ$F6eh{vf%$m_Gmnas<_RGkhc8a@gF-7s&;Ms^uNGR47d;=C+SR!Ue0mxCNJOwN}}#(2+D5N$b| z@V^6~StO;Qj;F6E565BRtQBnW@znxZZ_dNCs@qgq0v7)-gKvk#DW6+;d+~<1DXa9ag7KUBr zCF2at>1x&JjjI=3)Q5&2^K8_HwMzZOYN#=lkH7gyj5`aA_|EjQ`iY+7C&r^GpDtCN z&aA99xb%lQ>uX$3E=}nNX)x>eHT+~MdGcf`Idrpyk#E`L$!MM z5`JEXPqGvINn*0(L*6han#D4KFP+ZI7DASl=%%_HF8%?07cD}(%f0tpZ3Me+!J$2N z?o|9&n`BG}B_jB3j!m=hu~5FFRH{QN$lu&Yd;=#G_T67$yB%ct+otAxnP1OU#0Gfs zD(!Gbh>XB{agc0{E*9qbiADTcwz-nk?NFzFt628Yy$!uSCW@bsl=N{VaB)ML%eWnF z+Q82pDtbZYssOS?cbpaOCiN;OQ+w!wh8Qmj<<=KLCRq%l zi^^<`$01RjmDw{F02{{Rv9rIT+-#_OSF4K^`HJF*;7IiqsLP{3lzWcGt#i~0^5=8M zcnuNd@B|{CxXyc7w81lJFRD%Q_(m}bn5MBVsEFyYY-|+P3EEjJ{u~wVQPdDy*=i*rjVi?xr!mOyp&Ok3Q>up5R!kF~ z?h-A``Ux%KXwFecnc#NTrRWYCoCN zUrNcx>0_c8UQS+X38#=R};1 zt;_(1{W>=@Q{X42yPQtqli^jI^_>yF11G+;wG12r zd`@UL!t_uY)SyA7ZYlYwW2C@&Z?Zo%W+=sI& zYsEaf*KpHIrc2RFrc%?+<=>os=hXbymRc(AnM2Mt!qzXJ4wQ)uR6_OyRDqtrltQw` z!TlrMnO}R837jJg%Eh4J}v^ zl|51Y`6Z#fC&jKQT!Fg#D=OK*2yOc--=oqGZ&N5Wktf3Y5q#1$9%3WP8|a79`ZkkV z&{!JM6v0Ecsy|DG3{I~Ap=<9@l>C~?b)2!Ic~~v-MN*ebPXb*(fuwWVs5vnj7V0~i zhxv#_As*7B&BUzLNZy|F8&WP<_Jy>#d2>M~5=t$a8M+6-ruj2g%$46DX{+ z7}OS5q_B8gZo5nC-ep|G4!ZhLF=ipIQ8PRZ%Sn#BlFV|8sO#LI1c_DHS zUEWl(0C^=zL4rF2+dvI}%|QzCfeWmbrlfMHMYYjA zIpi25{8zADLlhW!v*yS|DR~+ffa^MM7$(76LrZadhCGWoNVglD+F#h85Y zqLm`%L5T`u1Ya$ofR2>NX`Z~*5zPV`p{anxFK*}?Mt2%O$)p?}F+PJj2@&SgTM0jN zte^x|#A=Rj+Zj5hM14V=4wOH5+H_twrM#CJKxx;%xEK0T9tVJ6ECh3=04 zg&1Kgu9}6TjG4y@xo87|8tz(Ixnvew7ky+O^)FHypA)Q-Af>ZvnMjD7@;7)JRJ`E7 zf)aMiKy5=DQh2uJs**2iL+f%edeEa*AZ$Dbz&gP&Q$bon!Ic!RR}NM$AYL8XC~^SA zXpo-O=g6S|&lnSvigj4rXgs?pNg8pXQNqP*MO4Mw3j7UhbZkbE+Dz zxCt)#ayQ~L?zucchcZ^@UvqrxL$k#iSkMXG7_}FlE~1%;(jyfsL@38GW{mBD3CJ4R zzD7B-LSfYpEEH$>PSU31VLAS?|4mCnn_GORz>Z}kx=IW<2d+pAoytZt&NyiInX#wti3trfdgnx|tk31K;i zFp0_TPUQQzXbOn~cMR#iru-&{M63pR3D4F>UAjFP&2)l>kBQz}KhY|$gGKw=#cka_$u2%&M>f}yl0yK zsdVIvGb0Fu8oy$f@h%T?OR2kPCCBvtGAd5oEw=X`gC{`dEqLXI7bO8)pLi;W0q8u0 zg8m6Z6Vuw>j*UWd$O({d%va#h=5Pk{pgWNw%P8ZTwLoZT4c24{#-UyOCgw-EOr-r7ZtRn!5(c6PLkLytKWNoT^9p~F7m(ZP_`4X%ignr40B-bG zQOb-)o*O_n6R-5|chWN)t@9hT_29xXTToEKiBgy}wAo2DVW?J`7dzz7E@Vj7b~RT) ziicLp^jHK;iG}ySl8H4ZPd+d-$lknB;%X@U*D+yLY+fuox9<<0Gw0zPA`bj$)y?lb zte~&Cv*;|q@+Z<-$vAmgk;R0PQQ7z6KP`8S_z$+otK^n8sHvq9BN$@U6r`;tL~$kT zb&L@daamE}hVb%cntjOh>ngWkC*0vLv`WWQiDKNt#p42w=s~Xy&YjS?r+130=6<)c z+MjdWfek9MOgM;J|C)I2QryQqC;GI`_H7mw;RR1l1|YHR^*4k35|$aZ8#^22o81~wAIDf{A9lnBd zhq@qBXIc3t0^cwF%t^vitH=7-ol5wGQ-{1bly18X(8_dvg@N<(&=&R51=VsROYQqO zx6VA~SD4rgiF}P9nMG4H*T{tV1~Jh>&jDOC{0n@|bJ-)u1yemMMPdD3b47C&*GOG2 zV%1T96@fW;@-z<5=t&3h!0Ktt+W>YFdMEOlRF#&fbwYgq$DIiD!5@%O_)={8QUjh8 zxcPP|q`RM#oEX-yrNXa=quS*i6t8YFYczVL)39KLkbNsDWzU+xk>rBuEaLTy zj&q^wH*!%Ibw=4XBR%X9oPNwcf7qd|jPj`uApPrLxis2|C7tZ&h1yM+LZ`pKYoHMw z3P=}+ZCHsHJsl!Xujp-u@uUM9ZZQ;`cWZBKLnapc2>;eYO(cLOUg4Moc_6fQ-(YeV zTiYa%@6t2r--IN0XHa4nN8+Z@qt$m{nhhg&0bAA8w7#aVF(1=S9Il{S-z*sdn#TCn zrv-W!US?4`Gbb$^nS+qaB3yQ=N7)wQ@di{d{+>zu!H|P{AzlVN)ZarS)h-Q?zK^^` zn~IVNJ7acY)dV=((hA4t160}y9K`Q0JR<<`|6WwW90>Y!5Xd2HEIY9VXA$alsBEbm zj321f{eHeV2!Y>$hAc~Z;v8q6fnoG5L7C4%#gb``n*QcM9XWvRS!=E&dfGDSWw4O&UqNl-L+g19w3`}Pa3Zew}^P&;1SDd*n?xQEm|nb$=h3I3UNk zfs{Qpla3^_&ArK~%j3G!lYM``!aJfnP0Af@(*jh2rvAYn^bYb?o|73N%VSknB@r+a zJT%54F8Vq-jzAJuAJWPu+cn4W5o03+NfBBRcK)tRmpgKBDIqhsC+ODZ$Ileste$I- z))Ti`4(HhvJGIH|xio40!?G?`n#9OC%~RPZX2OiHcs&J4@3q3%_(z<{KhpQSB@z7E zWJ-L+pXe8(J^Y83b8c+uzn-hJl1Zm=Xh1Bn4xhG!qQ0cDo{dX9g{=7)#nUP7-$P>P z9{Eg@e~i-$<_Db98s~bWtmKm)vEhxe^erB)`g7M`XyDuP*~}c(&H}wYbA?@u`$j{o z%!%@SUk1>5&hGp4*IY^bY@(*rZ4X7ST||Q?YYfLX+{#uam;^Zce$kL5Xu{FAhdAg;?`#F>}{_Rq+9mEqD)wqBu zk!C^971yXF)`ile4{6MXasb>Qt&@3dMR9MRT`$7d?`TWEK?RH|Ebolnf0s~Sgsdwl zuz+y^skIMC{n zrv^cyMh{pH5Qz6L+#g?v+Cvy7?`OqtH`46i3(&Nbpomlf*_Lp(m8lNz&H>ayM$tb{ z=P%X=x7N+Or8 zOY$k3rKvbPuACFOQwrE`$MHn|MYJkSEW=!~rxtWkc<)~uel)E_W>qO&6~V-feO;gc z1u4DI=awaDO#%Dw_X6CrzzaNSsmh zU(^c#Vn3_tXH_IIFQ?t*8c3J#S?owp=Z(sMya!#r4?}rsH(Bd<;{C?=AR2s@5euqjalC#(8o+y^ipIG-x#R5h(@RP<%4F*=umU$+l`1-$<@ zV;G_|p;%_mQ;bpy_t{+O)-j>atTnw_O(4<}4z3=NNAhUjcrSG;HfYz6_dzRc@4e$6 z7Ql`0PKntXKC{?#GMrriq=}&1dM@Rx5_;c~fh3t2_(W_g0IOojN9cq`zxcbN0di>C zZBEB*V*%r|(jp+N;*r~7ITJ@V^T;xg0Tf!h3Iux(97nIcYd(y>`~sJlY_#nD^MOCG1ue!Cb94lz zv3=DFJQHQPz=-S~sVRcbC~TC8Ux.tb}B=y8})TfW5dxjE_#L!4|KUow^O?C5* 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 z zHmLvd!=jS7v#Zc2FJzn$Gg)t8o;O?fLLYU@$cn057MzNY^5a(4H4r=$$BFUyL;o6% mlZ2rvk2o-EnmnY_#^Z+ Date: Wed, 9 Oct 2024 05:05:20 -0700 Subject: [PATCH 02/98] blocks: Add vector_from_angle and vector_multiply blocks --- .../blocks/math/vector_from_angle.tres | 17 ++++++++++++++++ .../blocks/math/vector_multiply.tres | 20 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 addons/block_code/blocks/math/vector_from_angle.tres create mode 100644 addons/block_code/blocks/math/vector_multiply.tres diff --git a/addons/block_code/blocks/math/vector_from_angle.tres b/addons/block_code/blocks/math/vector_from_angle.tres new file mode 100644 index 00000000..fce91df3 --- /dev/null +++ b/addons/block_code/blocks/math/vector_from_angle.tres @@ -0,0 +1,17 @@ +[gd_resource type="Resource" load_steps=2 format=3 uid="uid://c7a6wnxegkfd5"] + +[ext_resource type="Script" path="res://addons/block_code/code_generation/block_definition.gd" id="1_1p1ve"] + +[resource] +script = ExtResource("1_1p1ve") +name = &"from_angle" +target_node_class = "" +description = "Creates a unit Vector2 rotated to the given angle in radians." +category = "Math" +type = 3 +variant_type = 5 +display_template = "vector from {angle: FLOAT}" +code_template = "Vector2.from_angle({angle})" +defaults = {} +signal_name = "" +scope = "" diff --git a/addons/block_code/blocks/math/vector_multiply.tres b/addons/block_code/blocks/math/vector_multiply.tres new file mode 100644 index 00000000..8c82607d --- /dev/null +++ b/addons/block_code/blocks/math/vector_multiply.tres @@ -0,0 +1,20 @@ +[gd_resource type="Resource" load_steps=2 format=3 uid="uid://bff7cwmpisihj"] + +[ext_resource type="Script" path="res://addons/block_code/code_generation/block_definition.gd" id="1_52jwf"] + +[resource] +script = ExtResource("1_52jwf") +name = &"vector_multiply" +target_node_class = "" +description = "Multiplies a vector with a number. Use this, for example, to get a point some distance away along an angle." +category = "Math" +type = 3 +variant_type = 5 +display_template = "multiply {vector: VECTOR2} by {number: FLOAT}" +code_template = "{vector} * {number}" +defaults = { +"number": 1.0, +"vector": Vector2(1, 1) +} +signal_name = "" +scope = "" From be6324ab773a9a590d2e7a3b08322aea115f0ee1 Mon Sep 17 00:00:00 2001 From: Dylan McCall Date: Wed, 9 Oct 2024 05:06:02 -0700 Subject: [PATCH 03/98] pong_game: Reset ball velocity on reset --- .../examples/pong_game/pong_game.tscn | 172 +++++++++++------- 1 file changed, 102 insertions(+), 70 deletions(-) diff --git a/addons/block_code/examples/pong_game/pong_game.tscn b/addons/block_code/examples/pong_game/pong_game.tscn index 0dfd70c5..04389548 100644 --- a/addons/block_code/examples/pong_game/pong_game.tscn +++ b/addons/block_code/examples/pong_game/pong_game.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=82 format=3 uid="uid://tf7b8c64ecc0"] +[gd_scene load_steps=86 format=3 uid="uid://tf7b8c64ecc0"] [ext_resource type="PackedScene" uid="uid://cg8ibi18um3vg" path="res://addons/block_code/examples/pong_game/space.tscn" id="1_y56ac"] [ext_resource type="Script" path="res://addons/block_code/block_code_node/block_code.gd" id="3_6jaq8"] @@ -146,7 +146,7 @@ func _process(delta): " version = 0 -[sub_resource type="Resource" id="Resource_cu3t3"] +[sub_resource type="Resource" id="Resource_6jqfj"] script = ExtResource("4_qtggh") name = &"load_sound" children = Array[ExtResource("4_qtggh")]([]) @@ -155,7 +155,7 @@ arguments = { "name": "paddle_hit" } -[sub_resource type="Resource" id="Resource_edygh"] +[sub_resource type="Resource" id="Resource_27m4u"] script = ExtResource("4_qtggh") name = &"load_sound" children = Array[ExtResource("4_qtggh")]([]) @@ -164,7 +164,7 @@ arguments = { "name": "wall_hit" } -[sub_resource type="Resource" id="Resource_aonac"] +[sub_resource type="Resource" id="Resource_avkfr"] script = ExtResource("4_qtggh") name = &"load_sound" children = Array[ExtResource("4_qtggh")]([]) @@ -173,130 +173,161 @@ arguments = { "name": "score_sound" } -[sub_resource type="Resource" id="Resource_ktt3i"] +[sub_resource type="Resource" id="Resource_l70er"] script = ExtResource("4_qtggh") name = &"ready" -children = Array[ExtResource("4_qtggh")]([SubResource("Resource_cu3t3"), SubResource("Resource_edygh"), SubResource("Resource_aonac")]) +children = Array[ExtResource("4_qtggh")]([SubResource("Resource_6jqfj"), SubResource("Resource_27m4u"), SubResource("Resource_avkfr")]) arguments = {} -[sub_resource type="Resource" id="Resource_m68k1"] +[sub_resource type="Resource" id="Resource_w8omx"] script = ExtResource("5_omlge") -root = SubResource("Resource_ktt3i") +root = SubResource("Resource_l70er") canvas_position = Vector2(25, 0) -[sub_resource type="Resource" id="Resource_gg8gb"] +[sub_resource type="Resource" id="Resource_evnyh"] script = ExtResource("11_yafka") -name = &"viewport_center" +name = &"rigidbody2d_on_entered:something" arguments = {} -[sub_resource type="Resource" id="Resource_e8670"] -script = ExtResource("4_qtggh") -name = &"rigidbody2d_physics_position" -children = Array[ExtResource("4_qtggh")]([]) +[sub_resource type="Resource" id="Resource_u6uv2"] +script = ExtResource("11_yafka") +name = &"is_node_in_group" arguments = { -"position": SubResource("Resource_gg8gb") +"group": "paddles", +"node": SubResource("Resource_evnyh") } -[sub_resource type="Resource" id="Resource_06t6x"] +[sub_resource type="Resource" id="Resource_wiphk"] script = ExtResource("4_qtggh") name = &"play_sound" children = Array[ExtResource("4_qtggh")]([]) arguments = { "db": 0.0, -"name": "score_sound", +"name": "paddle_hit", "pitch": 1.0 } -[sub_resource type="Resource" id="Resource_ym15d"] +[sub_resource type="Resource" id="Resource_nma3q"] script = ExtResource("4_qtggh") -name = &"define_method" -children = Array[ExtResource("4_qtggh")]([SubResource("Resource_e8670"), SubResource("Resource_06t6x")]) +name = &"if" +children = Array[ExtResource("4_qtggh")]([SubResource("Resource_wiphk")]) arguments = { -"method_name": &"reset" +"condition": SubResource("Resource_u6uv2") } -[sub_resource type="Resource" id="Resource_ibkru"] -script = ExtResource("5_omlge") -root = SubResource("Resource_ym15d") -canvas_position = Vector2(25, 250) - -[sub_resource type="Resource" id="Resource_huint"] +[sub_resource type="Resource" id="Resource_yt6ib"] script = ExtResource("11_yafka") name = &"rigidbody2d_on_entered:something" arguments = {} -[sub_resource type="Resource" id="Resource_ss0pf"] +[sub_resource type="Resource" id="Resource_ywck6"] script = ExtResource("11_yafka") name = &"is_node_in_group" arguments = { -"group": "paddles", -"node": SubResource("Resource_huint") +"group": "walls", +"node": SubResource("Resource_yt6ib") } -[sub_resource type="Resource" id="Resource_x4ohp"] +[sub_resource type="Resource" id="Resource_ai74x"] script = ExtResource("4_qtggh") name = &"play_sound" children = Array[ExtResource("4_qtggh")]([]) arguments = { "db": 0.0, -"name": "paddle_hit", +"name": "wall_hit", "pitch": 1.0 } -[sub_resource type="Resource" id="Resource_0icvv"] +[sub_resource type="Resource" id="Resource_rfg43"] script = ExtResource("4_qtggh") name = &"if" -children = Array[ExtResource("4_qtggh")]([SubResource("Resource_x4ohp")]) +children = Array[ExtResource("4_qtggh")]([SubResource("Resource_ai74x")]) arguments = { -"condition": SubResource("Resource_ss0pf") +"condition": SubResource("Resource_ywck6") } -[sub_resource type="Resource" id="Resource_eanhn"] +[sub_resource type="Resource" id="Resource_0yy2j"] +script = ExtResource("4_qtggh") +name = &"rigidbody2d_on_entered" +children = Array[ExtResource("4_qtggh")]([SubResource("Resource_nma3q"), SubResource("Resource_rfg43")]) +arguments = {} + +[sub_resource type="Resource" id="Resource_121qg"] +script = ExtResource("5_omlge") +root = SubResource("Resource_0yy2j") +canvas_position = Vector2(25, 450) + +[sub_resource type="Resource" id="Resource_iwf5j"] script = ExtResource("11_yafka") -name = &"rigidbody2d_on_entered:something" +name = &"viewport_center" arguments = {} -[sub_resource type="Resource" id="Resource_bhuca"] +[sub_resource type="Resource" id="Resource_ck8x6"] +script = ExtResource("4_qtggh") +name = &"rigidbody2d_physics_position" +children = Array[ExtResource("4_qtggh")]([]) +arguments = { +"position": SubResource("Resource_iwf5j") +} + +[sub_resource type="Resource" id="Resource_pxfyd"] script = ExtResource("11_yafka") -name = &"is_node_in_group" +name = &"randf_range" arguments = { -"group": "walls", -"node": SubResource("Resource_eanhn") +"from": 0.0, +"to": 6.28 +} + +[sub_resource type="Resource" id="Resource_3p8ft"] +script = ExtResource("11_yafka") +name = &"from_angle" +arguments = { +"angle": SubResource("Resource_pxfyd") +} + +[sub_resource type="Resource" id="Resource_fqd50"] +script = ExtResource("11_yafka") +name = &"vector_multiply" +arguments = { +"number": 600.0, +"vector": SubResource("Resource_3p8ft") } -[sub_resource type="Resource" id="Resource_3l1pb"] +[sub_resource type="Resource" id="Resource_wm52c"] +script = ExtResource("4_qtggh") +name = &"RigidBody2D_set_linear_velocity" +children = Array[ExtResource("4_qtggh")]([]) +arguments = { +"value": SubResource("Resource_fqd50") +} + +[sub_resource type="Resource" id="Resource_jnqks"] script = ExtResource("4_qtggh") name = &"play_sound" children = Array[ExtResource("4_qtggh")]([]) arguments = { "db": 0.0, -"name": "wall_hit", +"name": "score_sound", "pitch": 1.0 } -[sub_resource type="Resource" id="Resource_l6cf3"] +[sub_resource type="Resource" id="Resource_hy3qr"] script = ExtResource("4_qtggh") -name = &"if" -children = Array[ExtResource("4_qtggh")]([SubResource("Resource_3l1pb")]) +name = &"define_method" +children = Array[ExtResource("4_qtggh")]([SubResource("Resource_ck8x6"), SubResource("Resource_wm52c"), SubResource("Resource_jnqks")]) arguments = { -"condition": SubResource("Resource_bhuca") +"method_name": &"reset" } -[sub_resource type="Resource" id="Resource_h2wbg"] -script = ExtResource("4_qtggh") -name = &"rigidbody2d_on_entered" -children = Array[ExtResource("4_qtggh")]([SubResource("Resource_0icvv"), SubResource("Resource_l6cf3")]) -arguments = {} - -[sub_resource type="Resource" id="Resource_wej53"] +[sub_resource type="Resource" id="Resource_7gd06"] script = ExtResource("5_omlge") -root = SubResource("Resource_h2wbg") -canvas_position = Vector2(25, 450) +root = SubResource("Resource_hy3qr") +canvas_position = Vector2(25, 225) [sub_resource type="Resource" id="Resource_6m2mk"] script = ExtResource("7_uuuue") script_inherits = "RigidBody2D" -block_serialization_trees = Array[ExtResource("5_omlge")]([SubResource("Resource_m68k1"), SubResource("Resource_ibkru"), SubResource("Resource_wej53")]) +block_serialization_trees = Array[ExtResource("5_omlge")]([SubResource("Resource_w8omx"), SubResource("Resource_121qg"), SubResource("Resource_7gd06")]) variables = Array[ExtResource("9_lo3p1")]([]) generated_script = "extends RigidBody2D @@ -321,19 +352,6 @@ func _ready(): add_child(__sound_3) -func reset(): - PhysicsServer2D.body_set_state( - get_rid(), - PhysicsServer2D.BODY_STATE_TRANSFORM, - Transform2D.IDENTITY.translated(((func (): var transform: Transform2D = get_viewport_transform(); var scale: Vector2 = transform.get_scale(); return -transform.origin / scale + get_viewport_rect().size / scale / 2).call())) - ) - - var __sound_node_1 = get_node('score_sound') - __sound_node_1.volume_db = 0 - __sound_node_1.pitch_scale = 1 - __sound_node_1.play() - - func _on_body_entered(something: Node2D): if ((something).is_in_group('paddles')): @@ -349,6 +367,20 @@ func _on_body_entered(something: Node2D): __sound_node_2.play() +func reset(): + PhysicsServer2D.body_set_state( + get_rid(), + PhysicsServer2D.BODY_STATE_TRANSFORM, + Transform2D.IDENTITY.translated(((func (): var transform: Transform2D = get_viewport_transform(); var scale: Vector2 = transform.get_scale(); return -transform.origin / scale + get_viewport_rect().size / scale / 2).call())) + ) + + linear_velocity = ((Vector2.from_angle((randf_range(0, 6.28)))) * 600) + var __sound_node_1 = get_node('score_sound') + __sound_node_1.volume_db = 0 + __sound_node_1.pitch_scale = 1 + __sound_node_1.play() + + " version = 0 From 47f35687af18333c35d38611366bfddf3817d407 Mon Sep 17 00:00:00 2001 From: Dylan McCall Date: Wed, 9 Oct 2024 16:10:41 +0200 Subject: [PATCH 04/98] blocks: Add label_set_text --- addons/block_code/blocks/ui/label_set_text.tres | 17 +++++++++++++++++ addons/block_code/ui/constants.gd | 5 +++++ 2 files changed, 22 insertions(+) create mode 100644 addons/block_code/blocks/ui/label_set_text.tres diff --git a/addons/block_code/blocks/ui/label_set_text.tres b/addons/block_code/blocks/ui/label_set_text.tres new file mode 100644 index 00000000..1a4f82ca --- /dev/null +++ b/addons/block_code/blocks/ui/label_set_text.tres @@ -0,0 +1,17 @@ +[gd_resource type="Resource" load_steps=2 format=3 uid="uid://ciqkywxdk4uht"] + +[ext_resource type="Script" path="res://addons/block_code/code_generation/block_definition.gd" id="1_bofov"] + +[resource] +script = ExtResource("1_bofov") +name = &"label_set_text" +target_node_class = "Label" +description = "Set the text for the label." +category = "UI" +type = 2 +variant_type = 0 +display_template = "set text to {text: STRING}" +code_template = "text = {text}" +defaults = {} +signal_name = "" +scope = "" diff --git a/addons/block_code/ui/constants.gd b/addons/block_code/ui/constants.gd index ca8e95b5..7fccb842 100644 --- a/addons/block_code/ui/constants.gd +++ b/addons/block_code/ui/constants.gd @@ -62,6 +62,11 @@ const BUILTIN_CATEGORIES_PROPS: Dictionary = { "color": Color("03aa74"), "order": 62, }, + "UI": + { + "color": Color("03aa74"), + "order": 65, + }, "Sounds": { "color": Color("e30fc0"), From f17a8be3d2b2fb496b010a81edaa6a97581f6dd3 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Wed, 9 Oct 2024 17:33:22 +0200 Subject: [PATCH 05/98] SimpleSpawner: Allow spawning nodes as child of scene In the current implementation, spawned nodes are children of the spawner. In some cases this behaviour is what you want, but it means it's not possible to change the spawn position of future scenes without moving already-spawned scenes. Add a new property to SimpleSpawner which allows choosing a new mode where spawned scenes are made children of the root scene. The change in spawn_start() is necessary because, if the Start Spawning block is used in the On Ready entrypoint, this results in spawn_start() being called from the SimpleSpawner's _ready() function. At this point, the SimpleSpawner itself is ready but the root scene is not. In this case, attempting to add a child to the root scene logs an error, and a later attempt to get the spawned scene's parent to remove it returns undefined. --- .../simple_spawner/simple_spawner.gd | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/addons/block_code/simple_spawner/simple_spawner.gd b/addons/block_code/simple_spawner/simple_spawner.gd index e3a53892..fac71698 100644 --- a/addons/block_code/simple_spawner/simple_spawner.gd +++ b/addons/block_code/simple_spawner/simple_spawner.gd @@ -7,11 +7,20 @@ const BlocksCatalog = preload("res://addons/block_code/code_generation/blocks_ca const OptionData = preload("res://addons/block_code/code_generation/option_data.gd") const Types = preload("res://addons/block_code/types/types.gd") +enum SpawnParent { + THIS, ## Spawned scenes are children of this node + SCENE, ## Spawned scenes are children of the scene +} enum LimitBehavior { REPLACE, NO_SPAWN } ## The scenes to spawn. If more than one are provided, they will be picked randomly. @export var scenes: Array[PackedScene] = [] +## The node that the spawned scenes should be a child of. If you want to move +## the SimpleSpawner without moving the scenes it has already spawned, choose +## SCENE. +@export var spawn_parent: SpawnParent + ## The period of time in seconds to spawn another component. If zero, they won't spawn ## automatically. Use the "Spawn" block. @export_range(0.0, 10.0, 0.1, "or_greater") var spawn_frequency: float = 0.0: @@ -41,7 +50,7 @@ func get_custom_class(): func _remove_oldest_spawned(): var spawned = _spawned_scenes.pop_front() if is_instance_valid(spawned): - remove_child(spawned) + spawned.get_parent().remove_child(spawned) func _set_spawn_fraquency(new_frequency: float): @@ -60,7 +69,7 @@ func spawn_start(): _timer.wait_time = spawn_frequency _timer.timeout.connect(spawn_once) _timer.start() - spawn_once() + spawn_once.call_deferred() func spawn_stop(): @@ -90,7 +99,12 @@ func spawn_once(): var scene: PackedScene = scenes.pick_random() var spawned = scene.instantiate() _spawned_scenes.push_back(spawned) - add_child(spawned) + match spawn_parent: + SpawnParent.THIS: + add_child(spawned) + SpawnParent.SCENE: + get_tree().current_scene.add_child(spawned) + spawned.position = global_position func do_set_spawn_frequency(new_frequency: float): From 80a8fc29c9b7fcdc377449b9653574e6a09574b9 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Thu, 10 Oct 2024 09:41:17 +0200 Subject: [PATCH 06/98] Allow using Vector2 in boolean context A vector is truthy if either component is non-zero, and falsey if both components are zero. --- addons/block_code/types/types.gd | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/block_code/types/types.gd b/addons/block_code/types/types.gd index 99f64c36..4a7de445 100644 --- a/addons/block_code/types/types.gd +++ b/addons/block_code/types/types.gd @@ -41,6 +41,7 @@ const cast_relationships = [ [TYPE_FLOAT, TYPE_STRING, "str(%s)"], [TYPE_COLOR, TYPE_STRING, "str(%s)"], [TYPE_VECTOR2, TYPE_STRING, "str(%s)"], + [TYPE_VECTOR2, TYPE_BOOL, "%s"], ] # Directed graph, edges are CastGraphEdge From b2e82751ae79053cae153b69035880f962c198a2 Mon Sep 17 00:00:00 2001 From: Dylan McCall Date: Wed, 9 Oct 2024 16:35:20 +0200 Subject: [PATCH 07/98] simple_scoring: Show a single score label Instead of SimpleScoring providing a left and right score, change it to keep track of a single score, and show a single label. In the pong_game scene, we add two nodes: one for the left player, one for the right player. --- .../examples/pong_game/player_score.tscn | 51 +++++ .../examples/pong_game/pong_game.tscn | 179 +++++------------- .../simple_scoring/simple_scoring.gd | 121 ++++-------- 3 files changed, 139 insertions(+), 212 deletions(-) create mode 100644 addons/block_code/examples/pong_game/player_score.tscn diff --git a/addons/block_code/examples/pong_game/player_score.tscn b/addons/block_code/examples/pong_game/player_score.tscn new file mode 100644 index 00000000..fd5143bd --- /dev/null +++ b/addons/block_code/examples/pong_game/player_score.tscn @@ -0,0 +1,51 @@ +[gd_scene load_steps=11 format=3 uid="uid://djmtbm15n2wqq"] + +[ext_resource type="Script" path="res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd" id="1_eafo0"] +[ext_resource type="Script" path="res://addons/block_code/block_code_node/block_code.gd" id="2_4mu48"] +[ext_resource type="Script" path="res://addons/block_code/serialization/block_serialization_tree.gd" id="3_kpcgt"] +[ext_resource type="Script" path="res://addons/block_code/serialization/block_serialization.gd" id="4_ph8ne"] +[ext_resource type="Script" path="res://addons/block_code/serialization/block_script_serialization.gd" id="6_k7up7"] +[ext_resource type="Script" path="res://addons/block_code/code_generation/variable_definition.gd" id="7_x0rr3"] + +[sub_resource type="Resource" id="Resource_paaek"] +script = ExtResource("4_ph8ne") +name = &"simplescoring_change_score" +children = Array[ExtResource("4_ph8ne")]([]) +arguments = { +"score": 1 +} + +[sub_resource type="Resource" id="Resource_brrr0"] +script = ExtResource("4_ph8ne") +name = &"define_method" +children = Array[ExtResource("4_ph8ne")]([SubResource("Resource_paaek")]) +arguments = { +"method_name": &"goal" +} + +[sub_resource type="Resource" id="Resource_ohja8"] +script = ExtResource("3_kpcgt") +root = SubResource("Resource_brrr0") +canvas_position = Vector2(50, 50) + +[sub_resource type="Resource" id="Resource_l2yhu"] +script = ExtResource("6_k7up7") +script_inherits = "SimpleScoring" +block_serialization_trees = Array[ExtResource("3_kpcgt")]([SubResource("Resource_ohja8")]) +variables = Array[ExtResource("7_x0rr3")]([]) +generated_script = "extends SimpleScoring + + +func goal(): + score += 1 + +" +version = 0 + +[node name="PlayerScore" type="Node2D" groups=["hud"]] +script = ExtResource("1_eafo0") +score = null + +[node name="BlockCode" type="Node" parent="."] +script = ExtResource("2_4mu48") +block_script = SubResource("Resource_l2yhu") diff --git a/addons/block_code/examples/pong_game/pong_game.tscn b/addons/block_code/examples/pong_game/pong_game.tscn index 04389548..c92310a4 100644 --- a/addons/block_code/examples/pong_game/pong_game.tscn +++ b/addons/block_code/examples/pong_game/pong_game.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=86 format=3 uid="uid://tf7b8c64ecc0"] +[gd_scene load_steps=75 format=3 uid="uid://tf7b8c64ecc0"] [ext_resource type="PackedScene" uid="uid://cg8ibi18um3vg" path="res://addons/block_code/examples/pong_game/space.tscn" id="1_y56ac"] [ext_resource type="Script" path="res://addons/block_code/block_code_node/block_code.gd" id="3_6jaq8"] @@ -12,7 +12,7 @@ [ext_resource type="PackedScene" uid="uid://c7l70grmkauij" path="res://addons/block_code/examples/spawner/ball.tscn" id="9_xrqll"] [ext_resource type="Script" path="res://addons/block_code/serialization/value_block_serialization.gd" id="11_yafka"] [ext_resource type="PackedScene" uid="uid://fhoapg3anjsu" path="res://addons/block_code/examples/pong_game/goal_area.tscn" id="12_nqmxu"] -[ext_resource type="Script" path="res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd" id="13_tg3yk"] +[ext_resource type="PackedScene" uid="uid://djmtbm15n2wqq" path="res://addons/block_code/examples/pong_game/player_score.tscn" id="13_jvkp7"] [sub_resource type="Resource" id="Resource_7e5rp"] script = ExtResource("4_qtggh") @@ -384,36 +384,36 @@ func reset(): " version = 0 -[sub_resource type="Resource" id="Resource_2j063"] +[sub_resource type="Resource" id="Resource_tsyvf"] script = ExtResource("11_yafka") name = &"area2d_on_entered:something" arguments = {} -[sub_resource type="Resource" id="Resource_ar2nl"] +[sub_resource type="Resource" id="Resource_xwsub"] script = ExtResource("11_yafka") name = &"is_node_in_group" arguments = { "group": "balls", -"node": SubResource("Resource_2j063") +"node": SubResource("Resource_tsyvf") } -[sub_resource type="Resource" id="Resource_53g7x"] +[sub_resource type="Resource" id="Resource_wwa40"] script = ExtResource("11_yafka") name = &"get_node" arguments = { -"path": NodePath("../SimpleScoring") +"path": NodePath("../CanvasLayer/PlayerScoreRight") } -[sub_resource type="Resource" id="Resource_stgye"] +[sub_resource type="Resource" id="Resource_qqoih"] script = ExtResource("4_qtggh") name = &"call_method_node" children = Array[ExtResource("4_qtggh")]([]) arguments = { -"method_name": "goal_left", -"node": SubResource("Resource_53g7x") +"method_name": "goal", +"node": SubResource("Resource_wwa40") } -[sub_resource type="Resource" id="Resource_p10a0"] +[sub_resource type="Resource" id="Resource_ppkia"] script = ExtResource("4_qtggh") name = &"call_method_group" children = Array[ExtResource("4_qtggh")]([]) @@ -422,29 +422,29 @@ arguments = { "method_name": "reset" } -[sub_resource type="Resource" id="Resource_3wwda"] +[sub_resource type="Resource" id="Resource_8nml3"] script = ExtResource("4_qtggh") name = &"if" -children = Array[ExtResource("4_qtggh")]([SubResource("Resource_stgye"), SubResource("Resource_p10a0")]) +children = Array[ExtResource("4_qtggh")]([SubResource("Resource_qqoih"), SubResource("Resource_ppkia")]) arguments = { -"condition": SubResource("Resource_ar2nl") +"condition": SubResource("Resource_xwsub") } -[sub_resource type="Resource" id="Resource_w0w2g"] +[sub_resource type="Resource" id="Resource_dwnid"] script = ExtResource("4_qtggh") name = &"area2d_on_entered" -children = Array[ExtResource("4_qtggh")]([SubResource("Resource_3wwda")]) +children = Array[ExtResource("4_qtggh")]([SubResource("Resource_8nml3")]) arguments = {} -[sub_resource type="Resource" id="Resource_xwspv"] +[sub_resource type="Resource" id="Resource_lxv8m"] script = ExtResource("5_omlge") -root = SubResource("Resource_w0w2g") +root = SubResource("Resource_dwnid") canvas_position = Vector2(0, 25) [sub_resource type="Resource" id="Resource_4xylj"] script = ExtResource("7_uuuue") script_inherits = "Area2D" -block_serialization_trees = Array[ExtResource("5_omlge")]([SubResource("Resource_xwspv")]) +block_serialization_trees = Array[ExtResource("5_omlge")]([SubResource("Resource_lxv8m")]) variables = Array[ExtResource("9_lo3p1")]([]) generated_script = "extends Area2D @@ -455,42 +455,42 @@ func _init(): func _on_body_entered(something: Node2D): if ((something).is_in_group('balls')): - (get_node(\"../SimpleScoring\")).call('goal_left') + (get_node(\"../CanvasLayer/PlayerScoreRight\")).call('goal') get_tree().call_group('balls', 'reset') " version = 0 -[sub_resource type="Resource" id="Resource_turid"] +[sub_resource type="Resource" id="Resource_uxah8"] script = ExtResource("11_yafka") name = &"area2d_on_entered:something" arguments = {} -[sub_resource type="Resource" id="Resource_d1w0q"] +[sub_resource type="Resource" id="Resource_quoaq"] script = ExtResource("11_yafka") name = &"is_node_in_group" arguments = { "group": "balls", -"node": SubResource("Resource_turid") +"node": SubResource("Resource_uxah8") } -[sub_resource type="Resource" id="Resource_0c6ok"] +[sub_resource type="Resource" id="Resource_6toag"] script = ExtResource("11_yafka") name = &"get_node" arguments = { -"path": NodePath("../SimpleScoring") +"path": NodePath("../CanvasLayer/PlayerScoreLeft") } -[sub_resource type="Resource" id="Resource_wwo85"] +[sub_resource type="Resource" id="Resource_fedsw"] script = ExtResource("4_qtggh") name = &"call_method_node" children = Array[ExtResource("4_qtggh")]([]) arguments = { -"method_name": "goal_right", -"node": SubResource("Resource_0c6ok") +"method_name": "goal", +"node": SubResource("Resource_6toag") } -[sub_resource type="Resource" id="Resource_tb1lq"] +[sub_resource type="Resource" id="Resource_mt1hj"] script = ExtResource("4_qtggh") name = &"call_method_group" children = Array[ExtResource("4_qtggh")]([]) @@ -499,29 +499,29 @@ arguments = { "method_name": "reset" } -[sub_resource type="Resource" id="Resource_u8yle"] +[sub_resource type="Resource" id="Resource_ph36o"] script = ExtResource("4_qtggh") name = &"if" -children = Array[ExtResource("4_qtggh")]([SubResource("Resource_wwo85"), SubResource("Resource_tb1lq")]) +children = Array[ExtResource("4_qtggh")]([SubResource("Resource_fedsw"), SubResource("Resource_mt1hj")]) arguments = { -"condition": SubResource("Resource_d1w0q") +"condition": SubResource("Resource_quoaq") } -[sub_resource type="Resource" id="Resource_37m3y"] +[sub_resource type="Resource" id="Resource_pfahj"] script = ExtResource("4_qtggh") name = &"area2d_on_entered" -children = Array[ExtResource("4_qtggh")]([SubResource("Resource_u8yle")]) +children = Array[ExtResource("4_qtggh")]([SubResource("Resource_ph36o")]) arguments = {} -[sub_resource type="Resource" id="Resource_xxs51"] +[sub_resource type="Resource" id="Resource_s41xp"] script = ExtResource("5_omlge") -root = SubResource("Resource_37m3y") +root = SubResource("Resource_pfahj") canvas_position = Vector2(50, 25) [sub_resource type="Resource" id="Resource_xoc8a"] script = ExtResource("7_uuuue") script_inherits = "Area2D" -block_serialization_trees = Array[ExtResource("5_omlge")]([SubResource("Resource_xxs51")]) +block_serialization_trees = Array[ExtResource("5_omlge")]([SubResource("Resource_s41xp")]) variables = Array[ExtResource("9_lo3p1")]([]) generated_script = "extends Area2D @@ -532,102 +532,12 @@ func _init(): func _on_body_entered(something: Node2D): if ((something).is_in_group('balls')): - (get_node(\"../SimpleScoring\")).call('goal_right') + (get_node(\"../CanvasLayer/PlayerScoreLeft\")).call('goal') get_tree().call_group('balls', 'reset') " version = 0 -[sub_resource type="Resource" id="Resource_stylb"] -script = ExtResource("4_qtggh") -name = &"simplescoring_set_score_player_1" -children = Array[ExtResource("4_qtggh")]([]) -arguments = { -"score": 0 -} - -[sub_resource type="Resource" id="Resource_eigru"] -script = ExtResource("4_qtggh") -name = &"simplescoring_set_score_player_2" -children = Array[ExtResource("4_qtggh")]([]) -arguments = { -"score": 0 -} - -[sub_resource type="Resource" id="Resource_n3u3y"] -script = ExtResource("4_qtggh") -name = &"ready" -children = Array[ExtResource("4_qtggh")]([SubResource("Resource_stylb"), SubResource("Resource_eigru")]) -arguments = {} - -[sub_resource type="Resource" id="Resource_wbpd3"] -script = ExtResource("5_omlge") -root = SubResource("Resource_n3u3y") -canvas_position = Vector2(25, 0) - -[sub_resource type="Resource" id="Resource_jn5i5"] -script = ExtResource("4_qtggh") -name = &"simplescoring_change_score_player_1" -children = Array[ExtResource("4_qtggh")]([]) -arguments = { -"score": 1 -} - -[sub_resource type="Resource" id="Resource_mg3qf"] -script = ExtResource("4_qtggh") -name = &"define_method" -children = Array[ExtResource("4_qtggh")]([SubResource("Resource_jn5i5")]) -arguments = { -"method_name": &"goal_right" -} - -[sub_resource type="Resource" id="Resource_vmh6a"] -script = ExtResource("5_omlge") -root = SubResource("Resource_mg3qf") -canvas_position = Vector2(25, 250) - -[sub_resource type="Resource" id="Resource_ja52s"] -script = ExtResource("4_qtggh") -name = &"simplescoring_change_score_player_2" -children = Array[ExtResource("4_qtggh")]([]) -arguments = { -"score": 1 -} - -[sub_resource type="Resource" id="Resource_w80fi"] -script = ExtResource("4_qtggh") -name = &"define_method" -children = Array[ExtResource("4_qtggh")]([SubResource("Resource_ja52s")]) -arguments = { -"method_name": &"goal_left" -} - -[sub_resource type="Resource" id="Resource_npfqa"] -script = ExtResource("5_omlge") -root = SubResource("Resource_w80fi") -canvas_position = Vector2(25, 400) - -[sub_resource type="Resource" id="Resource_q418f"] -script = ExtResource("7_uuuue") -script_inherits = "SimpleScoring" -block_serialization_trees = Array[ExtResource("5_omlge")]([SubResource("Resource_wbpd3"), SubResource("Resource_vmh6a"), SubResource("Resource_npfqa")]) -variables = Array[ExtResource("9_lo3p1")]([]) -generated_script = "extends SimpleScoring - - -func _ready(): - score_left = 0 - score_right = 0 - -func goal_right(): - score_left += 1 - -func goal_left(): - score_right += 1 - -" -version = 0 - [node name="Pong" type="Node2D"] [node name="Space" parent="." instance=ExtResource("1_y56ac")] @@ -677,13 +587,16 @@ position = Vector2(1984, 544) script = ExtResource("3_6jaq8") block_script = SubResource("Resource_xoc8a") -[node name="SimpleScoring" type="CanvasLayer" parent="." groups=["hud"]] +[node name="CanvasLayer" type="CanvasLayer" parent="."] follow_viewport_enabled = true -script = ExtResource("13_tg3yk") -[node name="BlockCode" type="Node" parent="SimpleScoring"] -script = ExtResource("3_6jaq8") -block_script = SubResource("Resource_q418f") +[node name="PlayerScoreLeft" parent="CanvasLayer" instance=ExtResource("13_jvkp7")] +position = Vector2(240, 0) +score = 0 + +[node name="PlayerScoreRight" parent="CanvasLayer" instance=ExtResource("13_jvkp7")] +position = Vector2(1200, 0) +score = 0 [node name="Camera2D" type="Camera2D" parent="."] position = Vector2(960, 540) diff --git a/addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd b/addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd index cb412a68..2e0fcbd3 100644 --- a/addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +++ b/addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd @@ -1,48 +1,32 @@ @tool class_name SimpleScoring -extends CanvasLayer +extends Node2D const BlockDefinition = preload("res://addons/block_code/code_generation/block_definition.gd") const BlocksCatalog = preload("res://addons/block_code/code_generation/blocks_catalog.gd") const Types = preload("res://addons/block_code/types/types.gd") -@export var score_left: int: - set = _set_score_left +@export var score: int: + set = _set_score -@export var score_right: int: - set = _set_score_right +var _score_label: Label -var _score_labels: Dictionary -const _POSITIONS_FOR_PLAYER = { - "1": "left", - "2": "right", -} +func _create_score_label(): + if _score_label: + return + _score_label = Label.new() -func _create_score_label(player: String) -> Label: - var label := Label.new() + _score_label.set_size(Vector2(477, 1080)) + _score_label.pivot_offset = Vector2(240, 176) + #label.size_flags_horizontal = Control.SizeFlags.SIZE_EXPAND_FILL + #label.size_flags_vertical = Control.SizeFlags.SIZE_FILL + _score_label.add_theme_font_size_override("font_size", 200) + _score_label.text = "0" + _score_label.horizontal_alignment = HorizontalAlignment.HORIZONTAL_ALIGNMENT_CENTER - var x_pos: int - match player: - "left": - x_pos = 240 - "right": - x_pos = 1200 - _: - push_error('Unrecognized SimpleScoring player "%s"' % player) - - label.name = &"Player%sScore" % player.capitalize() - label.set_size(Vector2(477, 1080)) - label.set_position(Vector2(x_pos, 0)) - label.pivot_offset = Vector2(240, 176) - label.size_flags_horizontal = Control.SizeFlags.SIZE_EXPAND_FILL - label.size_flags_vertical = Control.SizeFlags.SIZE_FILL - label.add_theme_font_size_override("font_size", 200) - label.text = "0" - label.horizontal_alignment = HorizontalAlignment.HORIZONTAL_ALIGNMENT_CENTER - - return label + add_child(_score_label) func _ready(): @@ -51,66 +35,45 @@ func _ready(): func simple_setup(): add_to_group("hud", true) - - var left_label := _create_score_label("left") - _score_labels["left"] = left_label - _update_label("left", score_left) - add_child(left_label) - - var right_label := _create_score_label("right") - _score_labels["right"] = right_label - _update_label("right", score_right) - add_child(right_label) + _create_score_label() + _update_label(score) func get_custom_class(): return "SimpleScoring" -func _set_score_left(new_score_left): - score_left = new_score_left - if score_left and is_node_ready(): - _update_label("left", score_left) - - -func _set_score_right(new_score_right): - score_right = new_score_right - if score_right and is_node_ready(): - _update_label("right", score_right) - - -func _update_label(player, score): - _score_labels[player].text = str(score) +func _set_score(new_score): + score = new_score + _update_label(score) -## Sets the score for one player. -func set_player_score(player: String, score: int): - var text = _score_labels[player].text - if str(score) != text: - _score_labels[player].text = str(score) +func _update_label(score): + if not is_node_ready(): + return + _score_label.text = str(score) static func setup_custom_blocks(): var _class_name = "SimpleScoring" var block_list: Array[BlockDefinition] = [] - for player in _POSITIONS_FOR_PLAYER: - var block_definition: BlockDefinition = BlockDefinition.new() - block_definition.name = &"simplescoring_set_score_player_%s" % player - block_definition.target_node_class = _class_name - block_definition.category = "Info | Score" - block_definition.type = Types.BlockType.STATEMENT - block_definition.display_template = "set player %s score to {score: INT}" % player - block_definition.code_template = "score_%s = {score}" % _POSITIONS_FOR_PLAYER[player] - block_list.append(block_definition) - - block_definition = BlockDefinition.new() - block_definition.name = &"simplescoring_change_score_player_%s" % player - block_definition.target_node_class = _class_name - block_definition.category = "Info | Score" - block_definition.type = Types.BlockType.STATEMENT - block_definition.display_template = "change player %s score by {score: INT}" % player - block_definition.code_template = "score_%s += {score}" % _POSITIONS_FOR_PLAYER[player] - block_list.append(block_definition) + var block_definition: BlockDefinition = BlockDefinition.new() + block_definition.name = &"simplescoring_set_score" + block_definition.target_node_class = _class_name + block_definition.category = "Info | Score" + block_definition.type = Types.BlockType.STATEMENT + block_definition.display_template = "set score to {score: INT}" + block_definition.code_template = "score = {score}" + block_list.append(block_definition) + + block_definition = BlockDefinition.new() + block_definition.name = &"simplescoring_change_score" + block_definition.target_node_class = _class_name + block_definition.category = "Info | Score" + block_definition.type = Types.BlockType.STATEMENT + block_definition.display_template = "change score by {score: INT}" + block_definition.code_template = "score += {score}" + block_list.append(block_definition) BlocksCatalog.add_custom_blocks(_class_name, block_list) From 4040727f7f91255c64fbe2a67e8dcefa8096fa94 Mon Sep 17 00:00:00 2001 From: Dylan McCall Date: Wed, 9 Oct 2024 18:53:00 +0200 Subject: [PATCH 08/98] blocks_catalog: Add emitting property for CPUParticles2D --- addons/block_code/code_generation/blocks_catalog.gd | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/addons/block_code/code_generation/blocks_catalog.gd b/addons/block_code/code_generation/blocks_catalog.gd index 61a288ed..227b568f 100644 --- a/addons/block_code/code_generation/blocks_catalog.gd +++ b/addons/block_code/code_generation/blocks_catalog.gd @@ -76,6 +76,14 @@ const _SETTINGS_FOR_CLASS_PROPERTY = { { "velocity": {"category": "Physics | Velocity"}, }, + "CPUParticles2D": + { + "emitting": + { + "category": "Lifecycle | Spawn", + "has_change": false, + }, + }, } static var _catalog: Dictionary From 31d35d90aa767b8624309206157ff5a756db5266 Mon Sep 17 00:00:00 2001 From: Dylan McCall Date: Thu, 10 Oct 2024 09:43:28 +0200 Subject: [PATCH 09/98] blocks: Add cpuparticles2d_finished This block is useful to do an action when a one-shot particle emitter is finished emitting. --- .../blocks/spawn/cpuparticles2d_finished.tres | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 addons/block_code/blocks/spawn/cpuparticles2d_finished.tres diff --git a/addons/block_code/blocks/spawn/cpuparticles2d_finished.tres b/addons/block_code/blocks/spawn/cpuparticles2d_finished.tres new file mode 100644 index 00000000..a70d9812 --- /dev/null +++ b/addons/block_code/blocks/spawn/cpuparticles2d_finished.tres @@ -0,0 +1,17 @@ +[gd_resource type="Resource" load_steps=2 format=3 uid="uid://c188gpgf4rpns"] + +[ext_resource type="Script" path="res://addons/block_code/code_generation/block_definition.gd" id="1_pmpup"] + +[resource] +script = ExtResource("1_pmpup") +name = &"cpuparticles2d_finished" +target_node_class = "CPUParticles2D" +description = "Emitted when all active particles have finished processing." +category = "Lifecycle | Spawn" +type = 1 +variant_type = 0 +display_template = "when particles are finished" +code_template = "" +defaults = {} +signal_name = "finished" +scope = "" From f69930477e11915e0fe52a997149f6bb20c8dfde Mon Sep 17 00:00:00 2001 From: Daze Date: Fri, 4 Oct 2024 22:02:08 +0000 Subject: [PATCH 10/98] Improve dropdown styling Changes the text color and style of the dropdowns to have no mouse hover interaction and more contrast. The dropdown popup menu is unaffected (it will still use the editor theme) Fixes https://github.com/endlessm/godot-block-coding/issues/203 --- .../parameter_input/parameter_input.tscn | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn b/addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn index ea589d7c..1dd1c812 100644 --- a/addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +++ b/addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=11 format=3 uid="uid://cjvxs6euc6xbm"] +[gd_scene load_steps=12 format=3 uid="uid://cjvxs6euc6xbm"] [ext_resource type="Script" path="res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd" id="1_rgmxn"] [ext_resource type="PackedScene" uid="uid://c7puyxpqcq6xo" path="res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn" id="2_05gck"] @@ -19,10 +19,17 @@ corner_radius_bottom_left = 40 [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_5hq7f"] -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_fjquj"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7m75r"] +bg_color = Color(1, 1, 1, 0.501961) +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_e7f0k"] +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_fjquj"] + [node name="ParameterInput" type="MarginContainer"] anchors_preset = 15 anchor_right = 1.0 @@ -95,7 +102,15 @@ visible = false custom_minimum_size = Vector2(40, 0) layout_mode = 2 tooltip_text = "Parameter" -theme_override_styles/normal = SubResource("StyleBoxEmpty_fjquj") +theme_override_colors/font_hover_pressed_color = Color(0.117647, 0.117647, 0.117647, 1) +theme_override_colors/font_hover_color = Color(0.117647, 0.117647, 0.117647, 1) +theme_override_colors/font_pressed_color = Color(0.117647, 0.117647, 0.117647, 1) +theme_override_colors/font_focus_color = Color(0.117647, 0.117647, 0.117647, 1) +theme_override_colors/font_color = Color(0.117647, 0.117647, 0.117647, 1) +theme_override_styles/focus = SubResource("StyleBoxFlat_7m75r") +theme_override_styles/hover = SubResource("StyleBoxFlat_7m75r") +theme_override_styles/pressed = SubResource("StyleBoxFlat_7m75r") +theme_override_styles/normal = SubResource("StyleBoxFlat_7m75r") action_mode = 1 fit_to_longest_item = false @@ -193,9 +208,14 @@ theme_override_constants/margin_left = 8 unique_name_in_owner = true custom_minimum_size = Vector2(60, 0) layout_mode = 2 -theme_override_colors/font_focus_color = Color(0, 0, 0, 1) -theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_colors/font_hover_pressed_color = Color(0.117647, 0.117647, 0.117647, 1) +theme_override_colors/font_hover_color = Color(0.117647, 0.117647, 0.117647, 1) +theme_override_colors/font_pressed_color = Color(0.117647, 0.117647, 0.117647, 1) +theme_override_colors/font_focus_color = Color(0.117647, 0.117647, 0.117647, 1) +theme_override_colors/font_color = Color(0.117647, 0.117647, 0.117647, 1) theme_override_styles/focus = SubResource("StyleBoxEmpty_e7f0k") +theme_override_styles/hover = SubResource("StyleBoxEmpty_6oowp") +theme_override_styles/pressed = SubResource("StyleBoxEmpty_6oowp") theme_override_styles/normal = SubResource("StyleBoxEmpty_fjquj") action_mode = 1 selected = 0 From eef1e60d97ceb1ebefdb305151f7cb38d3672b1c Mon Sep 17 00:00:00 2001 From: Dylan McCall Date: Thu, 10 Oct 2024 10:23:40 +0200 Subject: [PATCH 11/98] blocks: Fix cpuparticles2d_finished missing code template --- addons/block_code/blocks/spawn/cpuparticles2d_finished.tres | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/block_code/blocks/spawn/cpuparticles2d_finished.tres b/addons/block_code/blocks/spawn/cpuparticles2d_finished.tres index a70d9812..7758be63 100644 --- a/addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +++ b/addons/block_code/blocks/spawn/cpuparticles2d_finished.tres @@ -11,7 +11,7 @@ category = "Lifecycle | Spawn" type = 1 variant_type = 0 display_template = "when particles are finished" -code_template = "" +code_template = "func _on_finished():" defaults = {} signal_name = "finished" scope = "" From 877f5625f29c4e6210ade9afd4194a1ba3abd36e Mon Sep 17 00:00:00 2001 From: Daze Date: Wed, 9 Oct 2024 23:52:14 +0000 Subject: [PATCH 12/98] blocks: Add x of Vector2 and y of Vector2 blocks --- addons/block_code/blocks/math/vector2_x.tres | 19 +++++++++++++++++++ addons/block_code/blocks/math/vector2_y.tres | 19 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 addons/block_code/blocks/math/vector2_x.tres create mode 100644 addons/block_code/blocks/math/vector2_y.tres diff --git a/addons/block_code/blocks/math/vector2_x.tres b/addons/block_code/blocks/math/vector2_x.tres new file mode 100644 index 00000000..7e5e3dfa --- /dev/null +++ b/addons/block_code/blocks/math/vector2_x.tres @@ -0,0 +1,19 @@ +[gd_resource type="Resource" load_steps=2 format=3 uid="uid://btsfimn63xhi2"] + +[ext_resource type="Script" path="res://addons/block_code/code_generation/block_definition.gd" id="1_dvsrc"] + +[resource] +script = ExtResource("1_dvsrc") +name = &"vector2_x" +target_node_class = "" +description = "Gives the x of a [i]Vector2[/i]" +category = "Math" +type = 3 +variant_type = 3 +display_template = "x of {vector2: VECTOR2}" +code_template = "{vector2}.x" +defaults = { +"vector2": Vector2(0, 0) +} +signal_name = "" +scope = "" diff --git a/addons/block_code/blocks/math/vector2_y.tres b/addons/block_code/blocks/math/vector2_y.tres new file mode 100644 index 00000000..802f0b56 --- /dev/null +++ b/addons/block_code/blocks/math/vector2_y.tres @@ -0,0 +1,19 @@ +[gd_resource type="Resource" load_steps=2 format=3 uid="uid://ccbrbp4lee3wt"] + +[ext_resource type="Script" path="res://addons/block_code/code_generation/block_definition.gd" id="1_wuold"] + +[resource] +script = ExtResource("1_wuold") +name = &"vector2_y" +target_node_class = "" +description = "Gives the y of a [i]Vector2[/i]" +category = "Math" +type = 3 +variant_type = 3 +display_template = "y of {vector2: VECTOR2}" +code_template = "{vector2}.y" +defaults = { +"vector2": Vector2(0, 0) +} +signal_name = "" +scope = "" From 7a7f8489867120f5cfa8401b2f8e82799e0d9c39 Mon Sep 17 00:00:00 2001 From: Jian-Hong Pan Date: Thu, 10 Oct 2024 11:46:51 +0200 Subject: [PATCH 13/98] Util: Fix getting sub-scene's root path Cuurently, it prepends the "/root/" to the node's name as the path, if the node is the scene's root node. But, the absolute path reference points to nothing and leads NULL accessment. So, do not reform the path for the root node of the scene. --- addons/block_code/ui/util.gd | 5 ----- 1 file changed, 5 deletions(-) diff --git a/addons/block_code/ui/util.gd b/addons/block_code/ui/util.gd index 1a9c6ea5..70c84781 100644 --- a/addons/block_code/ui/util.gd +++ b/addons/block_code/ui/util.gd @@ -39,11 +39,6 @@ static func node_scene_path(node: Node, reference: Node, path_root: Node = null) if node.unique_name_in_owner: # With unique_name_in_owner, just use the % prefixed name. return NodePath("%%%s" % node.name) - elif node.is_ancestor_of(reference): - # If the node is an ancestor of the reference, it would begin - # with an ugly ../. Use an absolute path where /root is the - # path_root node. - return NodePath("/root/%s" % path_root.get_path_to(node)) else: # The node is reference or a child of it. Use a relative path. return reference.get_path_to(node) From 3fe993f05a44305d02baca40b631ee1aac045865 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Thu, 10 Oct 2024 15:31:58 +0200 Subject: [PATCH 14/98] blocks: Add remove node block When spawning nodes with SimpleSpawner, you likely need a way to delete the node eventually. While you can call queue_free on a node using the call_method_node block, it's nicer to hide the queue_free detail behind a block. --- .../blocks/lifecycle/queue_free_node.tres | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 addons/block_code/blocks/lifecycle/queue_free_node.tres diff --git a/addons/block_code/blocks/lifecycle/queue_free_node.tres b/addons/block_code/blocks/lifecycle/queue_free_node.tres new file mode 100644 index 00000000..4c393087 --- /dev/null +++ b/addons/block_code/blocks/lifecycle/queue_free_node.tres @@ -0,0 +1,17 @@ +[gd_resource type="Resource" load_steps=2 format=3 uid="uid://d31lkxkm5lww7"] + +[ext_resource type="Script" path="res://addons/block_code/code_generation/block_definition.gd" id="1_75fle"] + +[resource] +script = ExtResource("1_75fle") +name = &"queue_free_node" +target_node_class = "" +description = "Queues the given node to be deleted at the end of the current frame" +category = "Lifecycle" +type = 2 +variant_type = 0 +display_template = "remove {node: OBJECT}" +code_template = "{node}.queue_free()" +defaults = {} +signal_name = "" +scope = "" From 0f8d008ec253f65cdd607535627f37382cfd6224 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Qui=C3=B1ones?= Date: Thu, 10 Oct 2024 10:14:36 -0300 Subject: [PATCH 15/98] Await until animation is finished Add an option for playing the animation and waiting until it's done. The previous behavior is now another option "play in the background". For editing these block definition options in the Inspector, the class name is back to OptionData. --- .../blocks/graphics/animationplayer_play.tres | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/addons/block_code/blocks/graphics/animationplayer_play.tres b/addons/block_code/blocks/graphics/animationplayer_play.tres index 38149cc1..3a593f83 100644 --- a/addons/block_code/blocks/graphics/animationplayer_play.tres +++ b/addons/block_code/blocks/graphics/animationplayer_play.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" load_steps=6 format=3 uid="uid://c5e1byehtxwc0"] +[gd_resource type="Resource" load_steps=7 format=3 uid="uid://c5e1byehtxwc0"] [ext_resource type="Script" path="res://addons/block_code/code_generation/block_definition.gd" id="1_emeuv"] [ext_resource type="Script" path="res://addons/block_code/code_generation/option_data.gd" id="1_xu43h"] @@ -14,6 +14,11 @@ script = ExtResource("1_xu43h") selected = 0 items = ["forward", "backwards"] +[sub_resource type="Resource" id="Resource_17pec"] +script = ExtResource("1_xu43h") +selected = 0 +items = ["until done", "in the background"] + [resource] script = ExtResource("1_emeuv") name = &"animationplayer_play" @@ -22,15 +27,18 @@ description = "Play the animation." category = "Graphics | Animation" type = 2 variant_type = 0 -display_template = "play {animation: STRING} {direction: NIL}" +display_template = "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" code_template = "if {direction} == \"forward\": play({animation}) else: play_backwards({animation}) +if {wait_mode} == \"until done\": + await animation_finished " defaults = { "animation": SubResource("Resource_qpxn2"), -"direction": SubResource("Resource_vnp2w") +"direction": SubResource("Resource_vnp2w"), +"wait_mode": SubResource("Resource_17pec") } signal_name = "" scope = "" From 8d6be1861119ea7287bcbc69af2dbacc88032f08 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Thu, 10 Oct 2024 16:54:04 +0200 Subject: [PATCH 16/98] Fix typo in "call method on node" block "Call method on node" reads better than "Call method in node". --- addons/block_code/blocks/communication/call_method_node.tres | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/block_code/blocks/communication/call_method_node.tres b/addons/block_code/blocks/communication/call_method_node.tres index b677cdb4..3937dddb 100644 --- a/addons/block_code/blocks/communication/call_method_node.tres +++ b/addons/block_code/blocks/communication/call_method_node.tres @@ -10,7 +10,7 @@ description = "Calls the method/function of the given node" category = "Communication | Methods" type = 2 variant_type = 0 -display_template = "call method {method_name: STRING} in node {node: OBJECT}" +display_template = "call method {method_name: STRING} on node {node: OBJECT}" code_template = "{node}.call({method_name})" defaults = {} signal_name = "" From a704cb86ce2d0ea588dbbf2dca9f30dad98b65e0 Mon Sep 17 00:00:00 2001 From: Dylan McCall Date: Fri, 11 Oct 2024 12:04:36 +0200 Subject: [PATCH 17/98] block_canvas: Select the new block code node in add block code This fixes an issue where the blocks picker incorrectly generates its list of blocks before the block code node's block script is ready. --- addons/block_code/ui/main_panel.gd | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/addons/block_code/ui/main_panel.gd b/addons/block_code/ui/main_panel.gd index 92c1866d..c3185394 100644 --- a/addons/block_code/ui/main_panel.gd +++ b/addons/block_code/ui/main_panel.gd @@ -216,6 +216,7 @@ func _on_block_canvas_add_block_code(): undo_redo.create_action("Add block code for %s" % edited_node.name, UndoRedo.MERGE_DISABLE, edited_node) undo_redo.add_do_method(edited_node, "add_child", block_code, true) + undo_redo.add_do_method(self, "_select_node", block_code) undo_redo.add_do_property(block_code, "owner", scene_root) undo_redo.add_do_property(_context, "block_code_node", block_code) undo_redo.add_do_reference(block_code) @@ -225,6 +226,11 @@ func _on_block_canvas_add_block_code(): undo_redo.commit_action() +func _select_node(node: Node): + EditorInterface.get_selection().clear() + EditorInterface.get_selection().add_node(node) + + func _on_block_canvas_open_scene(): var edited_node: Node = EditorInterface.get_inspector().get_edited_object() as Node From 06f325cb0c7c03c3acf826109d931d10cd9600e9 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Mon, 14 Oct 2024 11:03:22 +0200 Subject: [PATCH 18/98] SimpleSpawner: Add unit suffixes to exported properties I learned about this annotation in a workshop hosted by Nathan from GDQuest. --- addons/block_code/simple_spawner/simple_spawner.gd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/block_code/simple_spawner/simple_spawner.gd b/addons/block_code/simple_spawner/simple_spawner.gd index fac71698..16b20fb7 100644 --- a/addons/block_code/simple_spawner/simple_spawner.gd +++ b/addons/block_code/simple_spawner/simple_spawner.gd @@ -23,11 +23,11 @@ enum LimitBehavior { REPLACE, NO_SPAWN } ## The period of time in seconds to spawn another component. If zero, they won't spawn ## automatically. Use the "Spawn" block. -@export_range(0.0, 10.0, 0.1, "or_greater") var spawn_frequency: float = 0.0: +@export_range(0.0, 10.0, 0.1, "or_greater", "suffix:s") var spawn_frequency: float = 0.0: set = _set_spawn_fraquency ## How many spawned scenes are allowed. If zero, there is no limit. -@export_range(0, 50, 0.1, "or_greater") var spawn_limit: int = 50 +@export_range(0, 50, 0.1, "or_greater", "suffix:scenes") var spawn_limit: int = 50 ## What happens when the limit is reached and a new spawn is attempted: ## - Replace: Remove the oldest spawned scene and spawn a new one. From 851e5f7c816b6a0cf755d986e7fd00700eab84ee Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Fri, 18 Oct 2024 09:22:14 -0600 Subject: [PATCH 19/98] blocks: Remove extra newlines from entry blocks Entry blocks already add a trailing newline, so there's no need to include one in the code template. See the ready, process and define_method blocks, for example. Having one doesn't cause any harm, but it does make the generated code uglier. --- addons/block_code/blocks/communication/area2d_on_entered.tres | 3 +-- addons/block_code/blocks/communication/area2d_on_exited.tres | 3 +-- .../blocks/communication/rigidbody2d_on_entered.tres | 3 +-- .../block_code/blocks/communication/rigidbody2d_on_exited.tres | 3 +-- tests/test_code_generation.gd | 1 - 5 files changed, 4 insertions(+), 9 deletions(-) diff --git a/addons/block_code/blocks/communication/area2d_on_entered.tres b/addons/block_code/blocks/communication/area2d_on_entered.tres index 7b358968..66e926cf 100644 --- a/addons/block_code/blocks/communication/area2d_on_entered.tres +++ b/addons/block_code/blocks/communication/area2d_on_entered.tres @@ -11,8 +11,7 @@ category = "Communication | Methods" type = 1 variant_type = 0 display_template = "when this node collides with [something: OBJECT]" -code_template = "func _on_body_entered(something: Node2D): -" +code_template = "func _on_body_entered(something: Node2D):" defaults = {} signal_name = "body_entered" scope = "" diff --git a/addons/block_code/blocks/communication/area2d_on_exited.tres b/addons/block_code/blocks/communication/area2d_on_exited.tres index 7e959b17..1af61a60 100644 --- a/addons/block_code/blocks/communication/area2d_on_exited.tres +++ b/addons/block_code/blocks/communication/area2d_on_exited.tres @@ -11,8 +11,7 @@ category = "Communication | Methods" type = 1 variant_type = 0 display_template = "when this node stops colliding with [something: OBJECT]" -code_template = "func _on_body_exited(something: Node2D): -" +code_template = "func _on_body_exited(something: Node2D):" defaults = {} signal_name = "body_exited" scope = "" diff --git a/addons/block_code/blocks/communication/rigidbody2d_on_entered.tres b/addons/block_code/blocks/communication/rigidbody2d_on_entered.tres index b9859c3c..9ffcfaf6 100644 --- a/addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +++ b/addons/block_code/blocks/communication/rigidbody2d_on_entered.tres @@ -11,8 +11,7 @@ category = "Communication | Methods" type = 1 variant_type = 0 display_template = "when this node collides with [something: OBJECT]" -code_template = "func _on_body_entered(something: Node2D): -" +code_template = "func _on_body_entered(something: Node2D):" defaults = {} signal_name = "body_entered" scope = "" diff --git a/addons/block_code/blocks/communication/rigidbody2d_on_exited.tres b/addons/block_code/blocks/communication/rigidbody2d_on_exited.tres index 7d8cf419..89638d96 100644 --- a/addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +++ b/addons/block_code/blocks/communication/rigidbody2d_on_exited.tres @@ -11,8 +11,7 @@ category = "Communication | Methods" type = 1 variant_type = 0 display_template = "when this node stops colliding with [something: OBJECT]" -code_template = "func _on_body_exited(something: Node2D): -" +code_template = "func _on_body_exited(something: Node2D):" defaults = {} signal_name = "body_exited" scope = "" diff --git a/tests/test_code_generation.gd b/tests/test_code_generation.gd index b97f933f..3f8490a5 100644 --- a/tests/test_code_generation.gd +++ b/tests/test_code_generation.gd @@ -232,7 +232,6 @@ func test_signal_script(): body_entered.connect(_on_body_entered) func _on_body_entered(something: Node2D): - print('Body entered!') """ From cbffdb6bbc44624d61e83b25a35983161f4d0848 Mon Sep 17 00:00:00 2001 From: Daze Date: Sun, 20 Oct 2024 20:55:57 +0000 Subject: [PATCH 20/98] Applies scale to preview block --- addons/block_code/drag_manager/drag.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/block_code/drag_manager/drag.gd b/addons/block_code/drag_manager/drag.gd index 76d41b2c..589c5a0d 100644 --- a/addons/block_code/drag_manager/drag.gd +++ b/addons/block_code/drag_manager/drag.gd @@ -194,7 +194,7 @@ func _update_preview(): _preview_block = Background.new() _preview_block.color = Color(1, 1, 1, 0.5) - _preview_block.custom_minimum_size = _block.get_global_rect().size + _preview_block.custom_minimum_size = _block.get_global_rect().size / scale _preview_block.size_flags_horizontal = Control.SIZE_SHRINK_BEGIN _preview_block.size_flags_vertical = Control.SIZE_SHRINK_BEGIN From 7ac9caae662ef4349142898106289568199a68c5 Mon Sep 17 00:00:00 2001 From: Daze Date: Thu, 10 Oct 2024 15:08:03 +0000 Subject: [PATCH 21/98] Adds zoom in and out buttons Proper input options are necessary for each platform, especially when the interface primarily utilizes point-and-click input --- .../ui/block_canvas/block_canvas.gd | 23 +++++++++++++-- .../ui/block_canvas/block_canvas.tscn | 29 +++++++++++++++++-- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/addons/block_code/ui/block_canvas/block_canvas.gd b/addons/block_code/ui/block_canvas/block_canvas.gd index f2c086f8..7a083da6 100644 --- a/addons/block_code/ui/block_canvas/block_canvas.gd +++ b/addons/block_code/ui/block_canvas/block_canvas.gd @@ -33,9 +33,14 @@ const ZOOM_FACTOR: float = 1.1 @onready var _replace_block_code_button: Button = %ReplaceBlockCodeButton @onready var _open_scene_icon = _open_scene_button.get_theme_icon("Load", "EditorIcons") +@onready var _icon_zoom_out := EditorInterface.get_editor_theme().get_icon("ZoomLess", "EditorIcons") +@onready var _icon_zoom_in := EditorInterface.get_editor_theme().get_icon("ZoomMore", "EditorIcons") @onready var _mouse_override: Control = %MouseOverride +@onready var _zoom_buttons: HBoxContainer = %ZoomButtons +@onready var _zoom_out_button: Button = %ZoomOutButton @onready var _zoom_button: Button = %ZoomButton +@onready var _zoom_in_button: Button = %ZoomInButton var _current_block_script: BlockScriptSerialization var _current_ast_list: ASTList @@ -58,6 +63,10 @@ func _ready(): if not _open_scene_button.icon and not Util.node_is_part_of_edited_scene(self): _open_scene_button.icon = _open_scene_icon + if not _zoom_out_button.icon: + _zoom_out_button.icon = _icon_zoom_out + if not _zoom_in_button.icon: + _zoom_in_button.icon = _icon_zoom_in func _can_drop_data(at_position: Vector2, data: Variant) -> bool: @@ -140,7 +149,7 @@ func _on_context_changed(): zoom = 1 _window.visible = false - _zoom_button.visible = false + _zoom_buttons.visible = false _empty_box.visible = false _selected_node_box.visible = false @@ -152,7 +161,7 @@ func _on_context_changed(): if _context.block_script != null: _load_block_script(_context.block_script) _window.visible = true - _zoom_button.visible = true + _zoom_buttons.visible = true if _context.block_script != _current_block_script: reset_window_position() @@ -437,6 +446,16 @@ func generate_script_from_current_window() -> String: return ScriptGenerator.generate_script(_current_ast_list, _context.block_script) +func _on_zoom_out_button_pressed() -> void: + if zoom > 0.2: + zoom /= ZOOM_FACTOR + + func _on_zoom_button_pressed(): zoom = 1.0 reset_window_position() + + +func _on_zoom_in_button_pressed() -> void: + if zoom < 2: + zoom *= ZOOM_FACTOR diff --git a/addons/block_code/ui/block_canvas/block_canvas.tscn b/addons/block_code/ui/block_canvas/block_canvas.tscn index a7c47b59..4c0dac88 100644 --- a/addons/block_code/ui/block_canvas/block_canvas.tscn +++ b/addons/block_code/ui/block_canvas/block_canvas.tscn @@ -24,6 +24,7 @@ mouse_filter = 2 [node name="Window" type="Control" parent="WindowContainer"] unique_name_in_owner = true +visible = false layout_mode = 2 anchors_preset = 0 offset_right = 1152.0 @@ -60,9 +61,31 @@ theme_override_constants/margin_top = 4 theme_override_constants/margin_right = 4 theme_override_constants/margin_bottom = 4 -[node name="ZoomButton" type="Button" parent="WindowContainer/Overlay/MarginContainer"] +[node name="ZoomButtons" type="HBoxContainer" parent="WindowContainer/Overlay/MarginContainer"] +unique_name_in_owner = true +visible = false +layout_mode = 2 + +[node name="ZoomOutButton" type="Button" parent="WindowContainer/Overlay/MarginContainer/ZoomButtons"] +unique_name_in_owner = true +modulate = Color(1, 1, 1, 0.470588) +custom_minimum_size = Vector2(25, 0) +layout_mode = 2 +focus_mode = 0 +theme_override_font_sizes/font_size = 24 + +[node name="ZoomButton" type="Button" parent="WindowContainer/Overlay/MarginContainer/ZoomButtons"] +unique_name_in_owner = true +modulate = Color(1, 1, 1, 0.470588) +layout_mode = 2 +focus_mode = 0 +theme_override_font_sizes/font_size = 24 +text = "1.0x" + +[node name="ZoomInButton" type="Button" parent="WindowContainer/Overlay/MarginContainer/ZoomButtons"] unique_name_in_owner = true modulate = Color(1, 1, 1, 0.470588) +custom_minimum_size = Vector2(25, 0) layout_mode = 2 focus_mode = 0 theme_override_font_sizes/font_size = 24 @@ -140,7 +163,9 @@ theme_type_variation = &"InspectorActionButton" text = "Override Block Code" icon = ExtResource("2_710vn") -[connection signal="pressed" from="WindowContainer/Overlay/MarginContainer/ZoomButton" to="." method="_on_zoom_button_pressed"] +[connection signal="pressed" from="WindowContainer/Overlay/MarginContainer/ZoomButtons/ZoomOutButton" to="." method="_on_zoom_out_button_pressed"] +[connection signal="pressed" from="WindowContainer/Overlay/MarginContainer/ZoomButtons/ZoomButton" to="." method="_on_zoom_button_pressed"] +[connection signal="pressed" from="WindowContainer/Overlay/MarginContainer/ZoomButtons/ZoomInButton" to="." method="_on_zoom_in_button_pressed"] [connection signal="pressed" from="SelectedNodeBox/ButtonsBox/AddBlockCodeButton" to="." method="_on_add_block_code_button_pressed"] [connection signal="pressed" from="SelectedNodeWithBlockCodeBox/ButtonsBox/OpenSceneButton" to="." method="_on_open_scene_button_pressed"] [connection signal="pressed" from="SelectedNodeWithBlockCodeBox/ButtonsBox/ReplaceBlockCodeButton" to="." method="_on_replace_block_code_button_pressed"] From 803998a6044ccdc1887e4c5a49657c7b1b3dad66 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Fri, 18 Oct 2024 11:24:31 -0600 Subject: [PATCH 22/98] simple_nodes: Add SimpleEnding node This provides a label that displays either a win or lose message along with blocks to set or clear the label during the game. Label is inherited directly so that all the label properties are available in the inspector. We want the label to be empty when the scene is run, but there may be text persisted in the scene file. When not in the editor, the text is cleared when entering the scene tree. Normally this would be done in _ready, but it's likely that gets replaced by a block script. https://phabricator.endlessm.com/T35661 --- .../simple_ending/simple_ending.gd | 89 +++++++++++++++++++ addons/block_code/ui/constants.gd | 5 ++ 2 files changed, 94 insertions(+) create mode 100644 addons/block_code/simple_nodes/simple_ending/simple_ending.gd diff --git a/addons/block_code/simple_nodes/simple_ending/simple_ending.gd b/addons/block_code/simple_nodes/simple_ending/simple_ending.gd new file mode 100644 index 00000000..e46fba50 --- /dev/null +++ b/addons/block_code/simple_nodes/simple_ending/simple_ending.gd @@ -0,0 +1,89 @@ +@tool +class_name SimpleEnding +extends Label + +const BlockDefinition = preload("res://addons/block_code/code_generation/block_definition.gd") +const BlocksCatalog = preload("res://addons/block_code/code_generation/blocks_catalog.gd") +const OptionData = preload("res://addons/block_code/code_generation/option_data.gd") +const Types = preload("res://addons/block_code/types/types.gd") + +## The message that will be shown when the player wins the game. +@export var win_message: String = "YOU WIN!" + +## The message that will be shown when the player loses the game. +@export var lose_message: String = "GAME OVER" + + +func game_over(result: String): + match result: + "WIN": + text = win_message + "LOSE": + text = lose_message + _: + text = "" + push_warning('Unrecognized game result "%s"' % result) + + +func reset(): + text = "" + + +func _ready(): + simple_setup() + + +func simple_setup(): + if not label_settings: + label_settings = LabelSettings.new() + label_settings.font_size = 200 + horizontal_alignment = HorizontalAlignment.HORIZONTAL_ALIGNMENT_CENTER + vertical_alignment = VerticalAlignment.VERTICAL_ALIGNMENT_CENTER + + +func _enter_tree(): + # In the editor, show the win message so that adjusting the label + # properties is visible. Otherwise, clear the text when entering the tree + # so that the label text persisted in the scene file isn't shown. + # + # Normally this would be done in _ready, but a block script might override + # that and simple_setup is too late. + if Engine.is_editor_hint(): + text = win_message + else: + text = "" + + +func get_custom_class(): + return "SimpleEnding" + + +static func setup_custom_blocks(): + var _class_name = "SimpleEnding" + var block_list: Array[BlockDefinition] = [] + var block_definition: BlockDefinition + + block_definition = BlockDefinition.new() + block_definition.name = &"simpleending_game_over" + block_definition.target_node_class = _class_name + block_definition.category = "Lifecycle | Game" + block_definition.type = Types.BlockType.STATEMENT + block_definition.display_template = "game over {result: STRING}" + block_definition.code_template = "game_over({result})" + block_definition.defaults = { + "result": OptionData.new(["WIN", "LOSE"]), + } + block_definition.description = "Show the game over label with the win or lose message." + block_list.append(block_definition) + + block_definition = BlockDefinition.new() + block_definition.name = &"simpleending_reset" + block_definition.target_node_class = _class_name + block_definition.category = "Lifecycle | Game" + block_definition.type = Types.BlockType.STATEMENT + block_definition.display_template = "reset game over" + block_definition.code_template = "reset()" + block_definition.description = "Reset the game over label." + block_list.append(block_definition) + + BlocksCatalog.add_custom_blocks(_class_name, block_list) diff --git a/addons/block_code/ui/constants.gd b/addons/block_code/ui/constants.gd index 7fccb842..e3b6d44b 100644 --- a/addons/block_code/ui/constants.gd +++ b/addons/block_code/ui/constants.gd @@ -22,6 +22,11 @@ const BUILTIN_CATEGORIES_PROPS: Dictionary = { "color": Color("ec3b59"), "order": 10, }, + "Lifecycle | Game": + { + "color": Color("ec3b59"), + "order": 12, + }, "Lifecycle | Spawn": { "color": Color("ec3b59"), From a353af4ec0398f03ec96c04c6674e11601463924 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Mon, 14 Oct 2024 11:05:49 +0200 Subject: [PATCH 23/98] SimpleSpawner: Rename frequency to period MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This property is the time, in seconds, to wait between spawning scenes. This is a period/interval/wavelength, not a frequency, which would be measured in Hz, or 1/seconds. Adjust the name of the property and its documentation. Remove the unnecessary do_set_spawn_frequency() method in favour of generating a property assignment. Update the example scene accordingly. The instances of “frequency” that I have not changed are in the example scene's on-screen documentation. In this case it was actually used correctly: the keyboard action to increase the frequency reduces the property which is now called period, and the decrease action respectively increases the period. --- .../block_code/examples/spawner/spawner.tscn | 18 +++++------ .../simple_spawner/simple_spawner.gd | 30 ++++++++----------- 2 files changed, 22 insertions(+), 26 deletions(-) diff --git a/addons/block_code/examples/spawner/spawner.tscn b/addons/block_code/examples/spawner/spawner.tscn index 1ec58202..2a6c6871 100644 --- a/addons/block_code/examples/spawner/spawner.tscn +++ b/addons/block_code/examples/spawner/spawner.tscn @@ -37,7 +37,7 @@ arguments = { [sub_resource type="Resource" id="Resource_uv0fo"] script = ExtResource("7_cykhe") -name = &"simplespawner_get_spawn_frequency" +name = &"simplespawner_get_spawn_period" arguments = {} [sub_resource type="Resource" id="Resource_l45hk"] @@ -50,10 +50,10 @@ arguments = { [sub_resource type="Resource" id="Resource_6g0ng"] script = ExtResource("6_dv2kl") -name = &"simplespawner_set_spawn_frequency" +name = &"simplespawner_set_spawn_period" children = Array[ExtResource("6_dv2kl")]([]) arguments = { -"new_frequency": SubResource("Resource_l45hk") +"new_period": SubResource("Resource_l45hk") } [sub_resource type="Resource" id="Resource_ke4bk"] @@ -74,7 +74,7 @@ arguments = { [sub_resource type="Resource" id="Resource_ih8lj"] script = ExtResource("7_cykhe") -name = &"simplespawner_get_spawn_frequency" +name = &"simplespawner_get_spawn_period" arguments = {} [sub_resource type="Resource" id="Resource_rfxul"] @@ -87,10 +87,10 @@ arguments = { [sub_resource type="Resource" id="Resource_2rqfa"] script = ExtResource("6_dv2kl") -name = &"simplespawner_set_spawn_frequency" +name = &"simplespawner_set_spawn_period" children = Array[ExtResource("6_dv2kl")]([]) arguments = { -"new_frequency": SubResource("Resource_rfxul") +"new_period": SubResource("Resource_rfxul") } [sub_resource type="Resource" id="Resource_movu5"] @@ -194,9 +194,9 @@ func _ready(): func _process(delta): if (Input.is_action_just_pressed('ui_right')): - do_set_spawn_frequency(((spawn_frequency) - 0.1)) + spawn_period = ((spawn_period) - 0.1) elif (Input.is_action_just_pressed('ui_left')): - do_set_spawn_frequency(((spawn_frequency) + 0.1)) + spawn_period = ((spawn_period) + 0.1) elif (Input.is_action_just_pressed('ui_up')): if (is_spawning()): spawn_stop() @@ -216,7 +216,7 @@ version = 0 position = Vector2(103, 128) script = ExtResource("1_g2l2s") scenes = Array[PackedScene]([ExtResource("2_d0h86"), ExtResource("3_tt12o")]) -spawn_frequency = 0.6 +spawn_period = 0.6 spawn_limit = 5 [node name="BlockCode" type="Node" parent="SimpleSpawner"] diff --git a/addons/block_code/simple_spawner/simple_spawner.gd b/addons/block_code/simple_spawner/simple_spawner.gd index 16b20fb7..8e63a512 100644 --- a/addons/block_code/simple_spawner/simple_spawner.gd +++ b/addons/block_code/simple_spawner/simple_spawner.gd @@ -23,8 +23,8 @@ enum LimitBehavior { REPLACE, NO_SPAWN } ## The period of time in seconds to spawn another component. If zero, they won't spawn ## automatically. Use the "Spawn" block. -@export_range(0.0, 10.0, 0.1, "or_greater", "suffix:s") var spawn_frequency: float = 0.0: - set = _set_spawn_fraquency +@export_range(0.0, 10.0, 0.1, "or_greater", "suffix:s") var spawn_period: float = 0.0: + set = _set_spawn_period ## How many spawned scenes are allowed. If zero, there is no limit. @export_range(0, 50, 0.1, "or_greater", "suffix:scenes") var spawn_limit: int = 50 @@ -53,20 +53,20 @@ func _remove_oldest_spawned(): spawned.get_parent().remove_child(spawned) -func _set_spawn_fraquency(new_frequency: float): - spawn_frequency = new_frequency +func _set_spawn_period(new_period: float): + spawn_period = new_period if not _timer or not is_instance_valid(_timer): return - _timer.wait_time = spawn_frequency + _timer.wait_time = spawn_period func spawn_start(): - if spawn_frequency == 0.0: + if spawn_period == 0.0: return if not _timer or not is_instance_valid(_timer): _timer = Timer.new() add_child(_timer) - _timer.wait_time = spawn_frequency + _timer.wait_time = spawn_period _timer.timeout.connect(spawn_once) _timer.start() spawn_once.call_deferred() @@ -107,10 +107,6 @@ func spawn_once(): spawned.position = global_position -func do_set_spawn_frequency(new_frequency: float): - _set_spawn_fraquency(new_frequency) - - static func setup_custom_blocks(): var _class_name = "SimpleSpawner" var block_list: Array[BlockDefinition] = [] @@ -153,22 +149,22 @@ static func setup_custom_blocks(): block_list.append(block_definition) block_definition = BlockDefinition.new() - block_definition.name = &"simplespawner_set_spawn_frequency" + block_definition.name = &"simplespawner_set_spawn_period" block_definition.target_node_class = _class_name block_definition.category = "Lifecycle | Spawn" block_definition.type = Types.BlockType.STATEMENT - block_definition.display_template = "set spawn frequency to {new_frequency: FLOAT}" - block_definition.code_template = "do_set_spawn_frequency({new_frequency})" + block_definition.display_template = "set spawn period to {new_period: FLOAT}" + block_definition.code_template = "spawn_period = {new_period}" block_list.append(block_definition) block_definition = BlockDefinition.new() - block_definition.name = &"simplespawner_get_spawn_frequency" + block_definition.name = &"simplespawner_get_spawn_period" block_definition.target_node_class = _class_name block_definition.category = "Lifecycle | Spawn" block_definition.type = Types.BlockType.VALUE block_definition.variant_type = TYPE_FLOAT - block_definition.display_template = "spawn frequency" - block_definition.code_template = "spawn_frequency" + block_definition.display_template = "spawn period" + block_definition.code_template = "spawn_period" block_list.append(block_definition) BlocksCatalog.add_custom_blocks(_class_name, block_list, [], {}) From 5ba3c30a1729ea478351cc87dc43787612aa8016 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Qui=C3=B1ones?= Date: Wed, 23 Oct 2024 10:02:47 -0300 Subject: [PATCH 24/98] Script Window: Use popup_dialog This is better because it considers the editor single window mode. --- addons/block_code/block_code_plugin.gd | 4 +--- addons/block_code/ui/script_window/script_window.gd | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/addons/block_code/block_code_plugin.gd b/addons/block_code/block_code_plugin.gd index 0067b7f2..9ced14ee 100644 --- a/addons/block_code/block_code_plugin.gd +++ b/addons/block_code/block_code_plugin.gd @@ -61,9 +61,7 @@ func _enter_tree(): func script_window_requested(script: String): var script_window = ScriptWindow.instantiate() script_window.script_content = script - - EditorInterface.get_base_control().add_child(script_window) - + EditorInterface.popup_dialog(script_window) await script_window.close_requested script_window.queue_free() diff --git a/addons/block_code/ui/script_window/script_window.gd b/addons/block_code/ui/script_window/script_window.gd index 77b09dd8..6fee30c1 100644 --- a/addons/block_code/ui/script_window/script_window.gd +++ b/addons/block_code/ui/script_window/script_window.gd @@ -7,7 +7,6 @@ var script_content: String = "" func _ready(): - popup_centered() script_label.text = script_content.replace("\t", " ") From 8288b9b2054182e174e23c71675c8c561192bbe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Qui=C3=B1ones?= Date: Wed, 23 Oct 2024 10:08:16 -0300 Subject: [PATCH 25/98] Script Window: Remove background color The TextEdit control node had the background color hardcoded to black. --- addons/block_code/ui/script_window/script_window.tscn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/block_code/ui/script_window/script_window.tscn b/addons/block_code/ui/script_window/script_window.tscn index b275d5cb..7031f116 100644 --- a/addons/block_code/ui/script_window/script_window.tscn +++ b/addons/block_code/ui/script_window/script_window.tscn @@ -4,6 +4,7 @@ [sub_resource type="SystemFont" id="SystemFont_r6ct2"] font_names = PackedStringArray("DejaVu Sans Mono") +subpixel_positioning = 0 [sub_resource type="CodeHighlighter" id="CodeHighlighter_yvmnf"] number_color = Color(0.498039, 0.760784, 0.686275, 1) @@ -76,7 +77,6 @@ theme_override_constants/margin_bottom = 35 [node name="Code" type="TextEdit" parent="Margin/VBox/ColorRect/Scroll/Margin"] layout_mode = 2 -theme_override_colors/background_color = Color(0.144063, 0.144063, 0.144062, 1) theme_override_fonts/font = SubResource("SystemFont_r6ct2") editable = false syntax_highlighter = SubResource("CodeHighlighter_yvmnf") From fc523e562c1a027935da17f4599a68b1317e4981 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Qui=C3=B1ones?= Date: Wed, 23 Oct 2024 10:31:44 -0300 Subject: [PATCH 26/98] Script Window: Improve layout Remove black ColorRect node. Also remove the Scroll node because the TextEdit containing the script can scroll automatically. Add a PanelContainer and Panel node. And remove unneeded MarginContainer nodes. This makes the layout work as expected when resizing the window. Previously the controls didn't shrink correctly (overflowing below the window). --- .../ui/script_window/script_window.gd | 2 +- .../ui/script_window/script_window.tscn | 43 ++++++++----------- 2 files changed, 18 insertions(+), 27 deletions(-) diff --git a/addons/block_code/ui/script_window/script_window.gd b/addons/block_code/ui/script_window/script_window.gd index 6fee30c1..9c18275b 100644 --- a/addons/block_code/ui/script_window/script_window.gd +++ b/addons/block_code/ui/script_window/script_window.gd @@ -3,7 +3,7 @@ extends Window var script_content: String = "" -@onready var script_label: TextEdit = $Margin/VBox/ColorRect/Scroll/Margin/Code +@onready var script_label: TextEdit = %Code func _ready(): diff --git a/addons/block_code/ui/script_window/script_window.tscn b/addons/block_code/ui/script_window/script_window.tscn index 7031f116..cb8fb854 100644 --- a/addons/block_code/ui/script_window/script_window.tscn +++ b/addons/block_code/ui/script_window/script_window.tscn @@ -36,49 +36,40 @@ size = Vector2i(750, 750) transient = true script = ExtResource("1_jja22") -[node name="Margin" type="MarginContainer" parent="."] +[node name="PanelContainer" type="PanelContainer" parent="."] anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -theme_override_constants/margin_left = 25 -theme_override_constants/margin_top = 25 -theme_override_constants/margin_right = 25 -theme_override_constants/margin_bottom = 25 -[node name="VBox" type="VBoxContainer" parent="Margin"] +[node name="Panel" type="Panel" parent="PanelContainer"] layout_mode = 2 -[node name="CopyCode" type="Button" parent="Margin/VBox"] +[node name="VBox" type="VBoxContainer" parent="PanelContainer"] layout_mode = 2 -text = "Copy" -[node name="ColorRect" type="ColorRect" parent="Margin/VBox"] +[node name="Code" type="TextEdit" parent="PanelContainer/VBox"] +unique_name_in_owner = true layout_mode = 2 -size_flags_horizontal = 3 size_flags_vertical = 3 -color = Color(0.172833, 0.172833, 0.172833, 1) +theme_override_fonts/font = SubResource("SystemFont_r6ct2") +editable = false +syntax_highlighter = SubResource("CodeHighlighter_yvmnf") -[node name="Scroll" type="ScrollContainer" parent="Margin/VBox/ColorRect"] +[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/VBox"] layout_mode = 2 -offset_top = -27.0 -offset_right = 700.0 -offset_bottom = 673.0 -[node name="Margin" type="MarginContainer" parent="Margin/VBox/ColorRect/Scroll"] +[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/VBox/HBoxContainer"] layout_mode = 2 size_flags_horizontal = 3 -size_flags_vertical = 3 -theme_override_constants/margin_left = 35 -theme_override_constants/margin_top = 55 -theme_override_constants/margin_right = 35 -theme_override_constants/margin_bottom = 35 +theme_override_constants/margin_left = 3 +theme_override_constants/margin_right = 3 +theme_override_constants/margin_bottom = 3 -[node name="Code" type="TextEdit" parent="Margin/VBox/ColorRect/Scroll/Margin"] +[node name="CopyCode" type="Button" parent="PanelContainer/VBox/HBoxContainer/MarginContainer"] layout_mode = 2 -theme_override_fonts/font = SubResource("SystemFont_r6ct2") -editable = false -syntax_highlighter = SubResource("CodeHighlighter_yvmnf") +size_flags_horizontal = 4 +text = "Copy" -[connection signal="pressed" from="Margin/VBox/CopyCode" to="." method="_on_copy_code_pressed"] +[connection signal="pressed" from="PanelContainer/VBox/HBoxContainer/MarginContainer/CopyCode" to="." method="_on_copy_code_pressed"] From 83b6cd28f0e32a0641fd1ab0ed70f52dedb4f0a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Qui=C3=B1ones?= Date: Wed, 23 Oct 2024 11:22:20 -0300 Subject: [PATCH 27/98] Script Window: Change control type to CodeEdit Changing from TextEdit to CodeEdit shows a better background color, making it more readable. --- addons/block_code/ui/script_window/script_window.tscn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/block_code/ui/script_window/script_window.tscn b/addons/block_code/ui/script_window/script_window.tscn index cb8fb854..0a72b48d 100644 --- a/addons/block_code/ui/script_window/script_window.tscn +++ b/addons/block_code/ui/script_window/script_window.tscn @@ -49,7 +49,7 @@ layout_mode = 2 [node name="VBox" type="VBoxContainer" parent="PanelContainer"] layout_mode = 2 -[node name="Code" type="TextEdit" parent="PanelContainer/VBox"] +[node name="Code" type="CodeEdit" parent="PanelContainer/VBox"] unique_name_in_owner = true layout_mode = 2 size_flags_vertical = 3 From b7568dbb45994f8080a5e47fd0ef981d2a970704 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Wed, 23 Oct 2024 16:14:21 +0100 Subject: [PATCH 28/98] fixup! Script Window: Change control type to CodeEdit --- addons/block_code/ui/script_window/script_window.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/block_code/ui/script_window/script_window.gd b/addons/block_code/ui/script_window/script_window.gd index 9c18275b..ae7c0005 100644 --- a/addons/block_code/ui/script_window/script_window.gd +++ b/addons/block_code/ui/script_window/script_window.gd @@ -3,7 +3,7 @@ extends Window var script_content: String = "" -@onready var script_label: TextEdit = %Code +@onready var script_label: CodeEdit = %Code func _ready(): From 527bc4b6f7b3090753e2b132ddb1503c9b6c3d32 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Wed, 23 Oct 2024 16:15:14 +0100 Subject: [PATCH 29/98] Script Window: Attempt to match editor's syntax highlighting If there is at least one script open in the editor, we can steal its syntax highlighter and apply it to the script window's CodeEdit control. Otherwise, we continue to use a built-in SyntaxHighlighter. --- addons/block_code/ui/script_window/script_window.gd | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/addons/block_code/ui/script_window/script_window.gd b/addons/block_code/ui/script_window/script_window.gd index ae7c0005..413098f1 100644 --- a/addons/block_code/ui/script_window/script_window.gd +++ b/addons/block_code/ui/script_window/script_window.gd @@ -6,7 +6,20 @@ var script_content: String = "" @onready var script_label: CodeEdit = %Code +## Attempts to match the syntax highlighting for some open script in the +## editor, which is more likely to be appropriate for the editor theme +## than our hardcoded default +func _apply_editor_syntax_highlighter(): + var script_editor: ScriptEditor = EditorInterface.get_script_editor() + for x in script_editor.get_open_script_editors(): + var control: Control = x.get_base_editor() + if control is TextEdit: + script_label.syntax_highlighter = control.syntax_highlighter + break + + func _ready(): + _apply_editor_syntax_highlighter() script_label.text = script_content.replace("\t", " ") From 778c8d72e6a4f617208c7361696a583767c46606 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Wed, 23 Oct 2024 16:59:32 +0100 Subject: [PATCH 30/98] Script Window: Don't clamp font color alpha channel to 0.65 Because the CodeEdit's readonly property is set, TextEdit forces the alpha channel of all text rendered to be no higher than the alpha channel of the default colour for text in disabled controls, which is 0.65 as I type this. While we do not want the code in this popover to be editable, we do want it to be legible. Override the relevant font color on the control to set its alpha channel to 1, effectively disabling this undesired clamping. --- addons/block_code/ui/script_window/script_window.gd | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/addons/block_code/ui/script_window/script_window.gd b/addons/block_code/ui/script_window/script_window.gd index 413098f1..6926e111 100644 --- a/addons/block_code/ui/script_window/script_window.gd +++ b/addons/block_code/ui/script_window/script_window.gd @@ -18,8 +18,16 @@ func _apply_editor_syntax_highlighter(): break +## Undoes the effect of the CodeEdit being read-only +func _remove_font_color_alpha_clamp(): + var font_readonly_color = script_label.get_theme_color("font_readonly_color") + font_readonly_color.a = 1 + script_label.add_theme_color_override("font_readonly_color", font_readonly_color) + + func _ready(): _apply_editor_syntax_highlighter() + _remove_font_color_alpha_clamp() script_label.text = script_content.replace("\t", " ") From 5721616ace3067c51db69cf8d7e1564a92d1bce5 Mon Sep 17 00:00:00 2001 From: wareya Date: Wed, 23 Oct 2024 09:06:15 -0300 Subject: [PATCH 31/98] Update Variables blocks color The previous yellow didn't have enough contrast. Fixes: #202 --- addons/block_code/ui/constants.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/block_code/ui/constants.gd b/addons/block_code/ui/constants.gd index e3b6d44b..edfb077a 100644 --- a/addons/block_code/ui/constants.gd +++ b/addons/block_code/ui/constants.gd @@ -134,7 +134,7 @@ const BUILTIN_CATEGORIES_PROPS: Dictionary = { }, "Variables": { - "color": Color("ff8f08"), + "color": Color("e06000"), "order": 180, }, "Math": From a66846a9b0daff4af8e0fdcbc22073463522165a Mon Sep 17 00:00:00 2001 From: Daze Date: Wed, 23 Oct 2024 16:21:54 +0000 Subject: [PATCH 32/98] Add type to block tooltips --- addons/block_code/ui/blocks/block/block.gd | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/addons/block_code/ui/blocks/block/block.gd b/addons/block_code/ui/blocks/block/block.gd index 700c5df4..38123c5c 100644 --- a/addons/block_code/ui/blocks/block/block.gd +++ b/addons/block_code/ui/blocks/block/block.gd @@ -214,7 +214,13 @@ func _to_string(): func _get_tooltip(at_position: Vector2) -> String: - return definition.description if definition else "" + if not definition: + return "" + + if definition.variant_type == Variant.Type.TYPE_NIL: + return definition.description + + return "{description}\n\nType: [b]{type}[/b]".format({"description": definition.description, "type": type_string(definition.variant_type)}) func _make_custom_tooltip(for_text) -> Control: From 4793b69114083bf2ef2f2245364c9c0084c1ae90 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Thu, 24 Oct 2024 12:24:38 -0600 Subject: [PATCH 33/98] serialization: Handle renamed blocks and arguments If a block or its arguments has been renamed, loading a scene with the old block name will fail and the user will be required to replace the block. Handle renamed blocks and arguments by migrating the names to the new values in the serialization resources. In order for the setters to run in the editor, the classes need to be tool scripts. https://phabricator.endlessm.com/T35547 --- .../serialization/block_serialization.gd | 55 ++++++++++++++++++- .../value_block_serialization.gd | 55 ++++++++++++++++++- 2 files changed, 106 insertions(+), 4 deletions(-) diff --git a/addons/block_code/serialization/block_serialization.gd b/addons/block_code/serialization/block_serialization.gd index 5a62b008..0fd12c44 100644 --- a/addons/block_code/serialization/block_serialization.gd +++ b/addons/block_code/serialization/block_serialization.gd @@ -1,13 +1,64 @@ +@tool extends Resource const BlockSerialization = preload("res://addons/block_code/serialization/block_serialization.gd") -@export var name: StringName +@export var name: StringName: + set = _set_name @export var children: Array[BlockSerialization] -@export var arguments: Dictionary # String, ValueBlockSerialization +@export var arguments: Dictionary: # String, ValueBlockSerialization + set = _set_arguments func _init(p_name: StringName = &"", p_children: Array[BlockSerialization] = [], p_arguments: Dictionary = {}): name = p_name children = p_children arguments = p_arguments + + +# Block name and arguments backwards compatibility handling. +const _renamed_blocks: Dictionary = {} + + +func _set_name(value): + var new_name = _renamed_blocks.get(value) + if new_name: + print("Migrating block %s to new name %s" % [value, new_name]) + name = new_name + if Engine.is_editor_hint(): + EditorInterface.mark_scene_as_unsaved() + else: + name = value + + +const _renamed_arguments: Dictionary = {} + + +func _set_arguments(value): + if not value is Dictionary: + return + + var renamed_args = _renamed_arguments.get(name) + if not renamed_args: + # Try with the new block name if it hasn't been migrated yet. + var new_block_name = _renamed_blocks.get(name) + if new_block_name: + renamed_args = _renamed_arguments.get(new_block_name) + + if renamed_args: + var changed: bool = false + value = value.duplicate() + for old_arg in renamed_args.keys(): + if not old_arg in value: + continue + + var new_arg = renamed_args[old_arg] + print("Migrating block %s argument %s to new name %s" % [name, old_arg, new_arg]) + value[new_arg] = value[old_arg] + value.erase(old_arg) + changed = true + + if changed and Engine.is_editor_hint(): + EditorInterface.mark_scene_as_unsaved() + + arguments = value diff --git a/addons/block_code/serialization/value_block_serialization.gd b/addons/block_code/serialization/value_block_serialization.gd index 6aea5a77..e200cee0 100644 --- a/addons/block_code/serialization/value_block_serialization.gd +++ b/addons/block_code/serialization/value_block_serialization.gd @@ -1,9 +1,60 @@ +@tool extends Resource -@export var name: StringName -@export var arguments: Dictionary # String, ValueBlockSerialization +@export var name: StringName: + set = _set_name +@export var arguments: Dictionary: # String, ValueBlockSerialization + set = _set_arguments func _init(p_name: StringName = &"", p_arguments: Dictionary = {}): name = p_name arguments = p_arguments + + +# Block name and arguments backwards compatibility handling. +const _renamed_blocks: Dictionary = {} + + +func _set_name(value): + var new_name = _renamed_blocks.get(value) + if new_name: + print("Migrating block %s to new name %s" % [value, new_name]) + name = new_name + if Engine.is_editor_hint(): + EditorInterface.mark_scene_as_unsaved() + else: + name = value + + +const _renamed_arguments: Dictionary = {} + + +func _set_arguments(value): + if not value is Dictionary: + return + + var renamed_args = _renamed_arguments.get(name) + if not renamed_args: + # Try with the new block name if it hasn't been migrated yet. + var new_block_name = _renamed_blocks.get(name) + if new_block_name: + renamed_args = _renamed_arguments.get(new_block_name) + + if renamed_args: + var changed: bool = false + value = value.duplicate() + for old_arg in renamed_args.keys(): + if not old_arg in value: + continue + + var new_arg = renamed_args[old_arg] + print("Migrating block %s argument %s to new name %s" % [name, old_arg, new_arg]) + value[new_arg] = value[old_arg] + value.erase(old_arg) + changed = true + + if changed and Engine.is_editor_hint(): + EditorInterface.mark_scene_as_unsaved() + + arguments = value From 6191c88704436b61456ee634d24440c257ab4b1c Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Thu, 24 Oct 2024 09:15:18 -0600 Subject: [PATCH 34/98] SimpleSpawner: Add spawn_frequency migration Renaming the spawn_frequency properties and blocks will break any existing scene since those are serialized. Migrate the spawn_frequency property by providing it as an additional unstored property that simply wraps spawn_period. Migrate the block names and arguments using the serialization renaming support from the previous commit. A test using a scene created before the renaming is provided to verify the migration. While this does not handle the worst compatibility breakage, it can be used as a model for other migrations. Note that the migration stub in MainPanel is likely too late for any legitimate fixes. Any migration likely needs to happen when the scene is loaded and instantiated, which is before MainPanel gets a hold of the objects. https://phabricator.endlessm.com/T35547 --- .../serialization/block_serialization.gd | 11 +- .../value_block_serialization.gd | 4 +- .../simple_spawner/simple_spawner.gd | 37 +++++ tests/data/simple_spawner_compat.tscn | 66 ++++++++ tests/test_compatibility.gd | 150 ++++++++++++++++++ 5 files changed, 265 insertions(+), 3 deletions(-) create mode 100644 tests/data/simple_spawner_compat.tscn create mode 100644 tests/test_compatibility.gd diff --git a/addons/block_code/serialization/block_serialization.gd b/addons/block_code/serialization/block_serialization.gd index 0fd12c44..d25e0dd6 100644 --- a/addons/block_code/serialization/block_serialization.gd +++ b/addons/block_code/serialization/block_serialization.gd @@ -17,7 +17,9 @@ func _init(p_name: StringName = &"", p_children: Array[BlockSerialization] = [], # Block name and arguments backwards compatibility handling. -const _renamed_blocks: Dictionary = {} +const _renamed_blocks: Dictionary = { + &"simplespawner_set_spawn_frequency": &"simplespawner_set_spawn_period", +} func _set_name(value): @@ -31,7 +33,12 @@ func _set_name(value): name = value -const _renamed_arguments: Dictionary = {} +const _renamed_arguments: Dictionary = { + &"simplespawner_set_spawn_period": + { + "new_frequency": "new_period", + }, +} func _set_arguments(value): diff --git a/addons/block_code/serialization/value_block_serialization.gd b/addons/block_code/serialization/value_block_serialization.gd index e200cee0..c9762a11 100644 --- a/addons/block_code/serialization/value_block_serialization.gd +++ b/addons/block_code/serialization/value_block_serialization.gd @@ -13,7 +13,9 @@ func _init(p_name: StringName = &"", p_arguments: Dictionary = {}): # Block name and arguments backwards compatibility handling. -const _renamed_blocks: Dictionary = {} +const _renamed_blocks: Dictionary = { + &"simplespawner_get_spawn_frequency": &"simplespawner_get_spawn_period", +} func _set_name(value): diff --git a/addons/block_code/simple_spawner/simple_spawner.gd b/addons/block_code/simple_spawner/simple_spawner.gd index 8e63a512..1bb196e3 100644 --- a/addons/block_code/simple_spawner/simple_spawner.gd +++ b/addons/block_code/simple_spawner/simple_spawner.gd @@ -168,3 +168,40 @@ static func setup_custom_blocks(): block_list.append(block_definition) BlocksCatalog.add_custom_blocks(_class_name, block_list, [], {}) + + +# Backwards compatibility handling +func _get_property_list() -> Array[Dictionary]: + return [ + { + # spawn_frequency was renamed to spawn_period + "name": "spawn_frequency", + "class_name": &"", + "type": TYPE_FLOAT, + "hint": PROPERTY_HINT_NONE, + "hint_string": "", + "usage": PROPERTY_USAGE_NONE, + }, + ] + + +func _get(property: StringName) -> Variant: + match property: + "spawn_frequency": + return spawn_period + _: + return null + + +func _set(property: StringName, value: Variant) -> bool: + match property: + "spawn_frequency": + print("Migrating SimpleSpawner spawn_frequency property to new name spawn_period") + spawn_period = value + _: + return false + + # Any migrated properties need to be resaved. + if Engine.is_editor_hint(): + EditorInterface.mark_scene_as_unsaved() + return true diff --git a/tests/data/simple_spawner_compat.tscn b/tests/data/simple_spawner_compat.tscn new file mode 100644 index 00000000..1ee3552f --- /dev/null +++ b/tests/data/simple_spawner_compat.tscn @@ -0,0 +1,66 @@ +[gd_scene load_steps=14 format=3 uid="uid://br3g0jiuidqmb"] + +[ext_resource type="Script" path="res://addons/block_code/simple_spawner/simple_spawner.gd" id="1_liuhg"] +[ext_resource type="Script" path="res://addons/block_code/block_code_node/block_code.gd" id="2_xxmhe"] +[ext_resource type="Script" path="res://addons/block_code/serialization/block_serialization_tree.gd" id="3_4xc0e"] +[ext_resource type="Script" path="res://addons/block_code/serialization/block_serialization.gd" id="4_ao2cd"] +[ext_resource type="Script" path="res://addons/block_code/serialization/value_block_serialization.gd" id="5_387nk"] +[ext_resource type="Script" path="res://addons/block_code/serialization/block_script_serialization.gd" id="5_a3p2k"] +[ext_resource type="Script" path="res://addons/block_code/code_generation/variable_definition.gd" id="6_1vau2"] + +[sub_resource type="Resource" id="Resource_kt8ln"] +script = ExtResource("4_ao2cd") +name = &"simplespawner_set_spawn_frequency" +children = Array[ExtResource("4_ao2cd")]([]) +arguments = { +"new_frequency": 10.0 +} + +[sub_resource type="Resource" id="Resource_4x50y"] +script = ExtResource("5_387nk") +name = &"simplespawner_get_spawn_frequency" +arguments = {} + +[sub_resource type="Resource" id="Resource_ar5am"] +script = ExtResource("4_ao2cd") +name = &"print" +children = Array[ExtResource("4_ao2cd")]([]) +arguments = { +"text": SubResource("Resource_4x50y") +} + +[sub_resource type="Resource" id="Resource_yeqkk"] +script = ExtResource("4_ao2cd") +name = &"ready" +children = Array[ExtResource("4_ao2cd")]([SubResource("Resource_kt8ln"), SubResource("Resource_ar5am")]) +arguments = {} + +[sub_resource type="Resource" id="Resource_o6xkk"] +script = ExtResource("3_4xc0e") +root = SubResource("Resource_yeqkk") +canvas_position = Vector2(54, 47) + +[sub_resource type="Resource" id="Resource_u6cb0"] +script = ExtResource("5_a3p2k") +script_inherits = "SimpleSpawner" +block_serialization_trees = Array[ExtResource("3_4xc0e")]([SubResource("Resource_o6xkk")]) +variables = Array[ExtResource("6_1vau2")]([]) +generated_script = "extends SimpleSpawner + + +func _ready(): + do_set_spawn_frequency(10) + print((spawn_frequency)) + +" +version = 0 + +[node name="Root" type="Node2D"] + +[node name="SimpleSpawner" type="Node2D" parent="."] +script = ExtResource("1_liuhg") +spawn_frequency = 5.0 + +[node name="BlockCode" type="Node" parent="SimpleSpawner"] +script = ExtResource("2_xxmhe") +block_script = SubResource("Resource_u6cb0") diff --git a/tests/test_compatibility.gd b/tests/test_compatibility.gd new file mode 100644 index 00000000..0c840c17 --- /dev/null +++ b/tests/test_compatibility.gd @@ -0,0 +1,150 @@ +extends GutTest +## Tests for scene file backwards compatibility + + +func get_scene_state_node_index(state: SceneState, name: String) -> int: + for idx in state.get_node_count(): + if state.get_node_name(idx) == name: + return idx + return -1 + + +func get_scene_state_node_prop_index(state: SceneState, node_idx: int, name: String) -> int: + for prop_idx in state.get_node_property_count(node_idx): + if state.get_node_property_name(node_idx, prop_idx) == name: + return prop_idx + return -1 + + +func _get_block_names_recursive(block: Resource, names: Array[String]): + names.append(block.name) + if "children" in block: + for child in block.children: + _get_block_names_recursive(child, names) + for value in block.arguments.values(): + if not value is Resource: + continue + if not value.script: + continue + if value.script.resource_path != "res://addons/block_code/serialization/value_block_serialization.gd": + continue + _get_block_names_recursive(value, names) + + +func get_block_script_block_names(block_script: Resource) -> Array[String]: + var names: Array[String] + for tree in block_script.block_serialization_trees: + _get_block_names_recursive(tree.root, names) + return names + + +func _get_block_argument_names_recursive(block: Resource, names: Array[String]): + names.append_array(block.arguments.keys()) + if "children" in block: + for child in block.children: + _get_block_argument_names_recursive(child, names) + for value in block.arguments.values(): + if not value is Resource: + continue + if not value.script: + continue + if value.script.resource_path != "res://addons/block_code/serialization/value_block_serialization.gd": + continue + _get_block_argument_names_recursive(value, names) + + +func get_block_script_argument_names(block_script: Resource) -> Array[String]: + var names: Array[String] + for tree in block_script.block_serialization_trees: + _get_block_argument_names_recursive(tree.root, names) + return names + + +func test_simple_spawner(): + const old_block_names: Array[String] = [ + "simplespawner_get_spawn_frequency", + "simplespawner_set_spawn_frequency", + ] + + const new_block_names: Array[String] = [ + "simplespawner_get_spawn_period", + "simplespawner_set_spawn_period", + ] + + const old_argument_names: Array[String] = [ + "new_frequency", + ] + + const new_argument_names: Array[String] = [ + "new_period", + ] + + var scene: PackedScene = load("res://tests/data/simple_spawner_compat.tscn") + assert_not_null(scene) + assert_true(scene.can_instantiate(), "Scene should be instantiable") + + var scene_state := scene.get_state() + var spawner_idx := get_scene_state_node_index(scene_state, "SimpleSpawner") + assert_gt(spawner_idx, -1, "SimpleSpawner node could not be found") + + # The packed SimpleSpawner node should have a simple_frequency + # property but no simple_period property. + var frequency_idx := get_scene_state_node_prop_index(scene_state, spawner_idx, "spawn_frequency") + var period_idx := get_scene_state_node_prop_index(scene_state, spawner_idx, "spawn_period") + assert_gt(frequency_idx, -1, "Old SimpleSpawner node should have spawn_frequency property") + assert_lt(period_idx, 0, "Old SimpleSpawner node should not have spawn_period property") + + var packed_frequency = scene_state.get_node_property_value(spawner_idx, frequency_idx) + assert_typeof(packed_frequency, TYPE_FLOAT) + assert_eq(packed_frequency, 5.0) + + var block_code_idx := get_scene_state_node_index(scene_state, "BlockCode") + assert_gt(block_code_idx, -1, "BlockCode node could not be found") + var block_script_idx := get_scene_state_node_prop_index(scene_state, block_code_idx, "block_script") + assert_gt(block_script_idx, -1, "BlockCode node block_script could not be found") + var packed_block_script = scene_state.get_node_property_value(block_code_idx, block_script_idx) + assert_typeof(packed_block_script, TYPE_OBJECT) + assert_eq("Resource", packed_block_script.get_class()) + assert_eq(packed_block_script.script.resource_path, "res://addons/block_code/serialization/block_script_serialization.gd") + + # Unlike Nodes, Resources are created immediately when loading the + # scene, so the block names and arguments should already be migrated. + var packed_block_names := get_block_script_block_names(packed_block_script) + for name in old_block_names: + assert_does_not_have(packed_block_names, name, "Block script should not have old name %s" % name) + for name in new_block_names: + assert_has(packed_block_names, name, "Block script should have new name %s" % name) + + var packed_argument_names := get_block_script_argument_names(packed_block_script) + for name in old_argument_names: + assert_does_not_have(packed_argument_names, name, "Block script should not have old argument %s" % name) + for name in new_argument_names: + assert_has(packed_argument_names, name, "Block script should have new argument %s" % name) + + # Instantiate the scene and check the Node properties. + var root := scene.instantiate() + assert_not_null(root) + autoqfree(root) + + var spawner: SimpleSpawner = root.get_node("SimpleSpawner") + assert_eq(spawner.spawn_frequency, 5.0) + assert_eq(spawner.spawn_period, 5.0) + + # Pack the scene and check that the old properties won't be saved. + var err: Error = scene.pack(root) + assert_eq(err, OK, "Packing scene should not cause an error") + + scene_state = scene.get_state() + spawner_idx = get_scene_state_node_index(scene_state, "SimpleSpawner") + assert_gt(spawner_idx, -1, "SimpleSpawner node could not be found") + + # The newly packed SimpleSpawner node should have a simple_period + # property but no simple_frequency property. + period_idx = get_scene_state_node_prop_index(scene_state, spawner_idx, "spawn_period") + frequency_idx = get_scene_state_node_prop_index(scene_state, spawner_idx, "spawn_frequency") + assert_gt(period_idx, -1, "New SimpleSpawner node should have spawn_period property") + assert_lt(frequency_idx, 0, "New SimpleSpawner node should not have spawn_frequency property") + + var packed_period = scene_state.get_node_property_value(spawner_idx, period_idx) + assert_typeof(packed_period, TYPE_FLOAT) + assert_eq(packed_period, 5.0) From 8b93cfb71b0add8f78eaf3c8d340755ad49626a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Qui=C3=B1ones?= Date: Fri, 25 Oct 2024 19:45:09 -0300 Subject: [PATCH 35/98] SimpleSpawner: Rotate spawned scene with spawner Rotate the spawned scene according to the SimpleSpawner node global rotation. Useful for changing the direction of bullets spawned from a rotated object. --- addons/block_code/simple_spawner/simple_spawner.gd | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/addons/block_code/simple_spawner/simple_spawner.gd b/addons/block_code/simple_spawner/simple_spawner.gd index 1bb196e3..c9112cf6 100644 --- a/addons/block_code/simple_spawner/simple_spawner.gd +++ b/addons/block_code/simple_spawner/simple_spawner.gd @@ -1,6 +1,12 @@ @tool class_name SimpleSpawner extends Node2D +## SimpleSpawner node. +## +## The scene being spawned is rotated according to this node's global rotation: +## - If the spawned scene is a RigidBody2D, the linear velocity and constant forces +## are rotated according to the SimpleSpawner node global rotation. +## - If the spawned scene is a Node2D, the rotation is copied from the SimpleSpawner node. const BlockDefinition = preload("res://addons/block_code/code_generation/block_definition.gd") const BlocksCatalog = preload("res://addons/block_code/code_generation/blocks_catalog.gd") @@ -99,6 +105,12 @@ func spawn_once(): var scene: PackedScene = scenes.pick_random() var spawned = scene.instantiate() _spawned_scenes.push_back(spawned) + # Rotate the spawned scene according to the SimpleSpawner: + if spawned is RigidBody2D: + spawned.linear_velocity = spawned.linear_velocity.rotated(global_rotation) + spawned.constant_force = spawned.constant_force.rotated(global_rotation) + elif spawned is Node2D: + spawned.rotate(global_rotation) match spawn_parent: SpawnParent.THIS: add_child(spawned) From 8b3514334e934500b66abc800cdb586a8ed52ed3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Qui=C3=B1ones?= Date: Mon, 28 Oct 2024 16:10:07 -0300 Subject: [PATCH 36/98] SimpleSpawner: Always spawn to the current scene Remove the spawn_parent property and only leave the "SCENE" behavior. Document this as part of the class documentation. --- .../simple_spawner/simple_spawner.gd | 22 ++++++------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/addons/block_code/simple_spawner/simple_spawner.gd b/addons/block_code/simple_spawner/simple_spawner.gd index c9112cf6..acae8032 100644 --- a/addons/block_code/simple_spawner/simple_spawner.gd +++ b/addons/block_code/simple_spawner/simple_spawner.gd @@ -3,6 +3,10 @@ class_name SimpleSpawner extends Node2D ## SimpleSpawner node. ## +## If multiple spawned scenes are provided, one is picked ramdomly when spawning. +## +## Spawned instances are children of the current scene. +## ## The scene being spawned is rotated according to this node's global rotation: ## - If the spawned scene is a RigidBody2D, the linear velocity and constant forces ## are rotated according to the SimpleSpawner node global rotation. @@ -13,20 +17,11 @@ const BlocksCatalog = preload("res://addons/block_code/code_generation/blocks_ca const OptionData = preload("res://addons/block_code/code_generation/option_data.gd") const Types = preload("res://addons/block_code/types/types.gd") -enum SpawnParent { - THIS, ## Spawned scenes are children of this node - SCENE, ## Spawned scenes are children of the scene -} enum LimitBehavior { REPLACE, NO_SPAWN } ## The scenes to spawn. If more than one are provided, they will be picked randomly. @export var scenes: Array[PackedScene] = [] -## The node that the spawned scenes should be a child of. If you want to move -## the SimpleSpawner without moving the scenes it has already spawned, choose -## SCENE. -@export var spawn_parent: SpawnParent - ## The period of time in seconds to spawn another component. If zero, they won't spawn ## automatically. Use the "Spawn" block. @export_range(0.0, 10.0, 0.1, "or_greater", "suffix:s") var spawn_period: float = 0.0: @@ -111,12 +106,9 @@ func spawn_once(): spawned.constant_force = spawned.constant_force.rotated(global_rotation) elif spawned is Node2D: spawned.rotate(global_rotation) - match spawn_parent: - SpawnParent.THIS: - add_child(spawned) - SpawnParent.SCENE: - get_tree().current_scene.add_child(spawned) - spawned.position = global_position + # Add the spawned instance to the current scene: + get_tree().current_scene.add_child(spawned) + spawned.position = global_position static func setup_custom_blocks(): From e2820c5dc76275e866f0136f61d638810c7b17a2 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Wed, 30 Oct 2024 09:29:17 -0600 Subject: [PATCH 37/98] Fix uid conflict in example ball scenes Godot 4.4 warns about UID conflicts between these scenes. It seems the scene was copied on the filesystem rather than using the editor's save as functionality, which generates new UIDs. This is also how pong started using the spawner ball scene. Likely the spawner example should just use the pong ball scene, but this makes them independent. --- addons/block_code/examples/pong_game/ball.tscn | 4 ++-- addons/block_code/examples/pong_game/pong_game.tscn | 2 +- addons/block_code/examples/spawner/ball.tscn | 2 +- addons/block_code/examples/spawner/spawner.tscn | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/block_code/examples/pong_game/ball.tscn b/addons/block_code/examples/pong_game/ball.tscn index caf00016..4ef4a36d 100644 --- a/addons/block_code/examples/pong_game/ball.tscn +++ b/addons/block_code/examples/pong_game/ball.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=5 format=3 uid="uid://c7l70grmkauij"] +[gd_scene load_steps=4 format=3 uid="uid://c7l70grmkauij"] [ext_resource type="Texture2D" uid="uid://bcgr5amsq3jfl" path="res://addons/block_code/examples/pong_game/assets/ball.png" id="2_xkrmm"] @@ -14,8 +14,8 @@ collision_layer = 2 collision_mask = 15 physics_material_override = SubResource("PhysicsMaterial_c3m63") continuous_cd = 1 -max_contacts_reported = 1 contact_monitor = true +max_contacts_reported = 1 linear_velocity = Vector2(353.553, 353.553) linear_damp_mode = 1 angular_damp_mode = 1 diff --git a/addons/block_code/examples/pong_game/pong_game.tscn b/addons/block_code/examples/pong_game/pong_game.tscn index c92310a4..0214b871 100644 --- a/addons/block_code/examples/pong_game/pong_game.tscn +++ b/addons/block_code/examples/pong_game/pong_game.tscn @@ -9,7 +9,7 @@ [ext_resource type="Script" path="res://addons/block_code/code_generation/option_data.gd" id="7_3q6bj"] [ext_resource type="Script" path="res://addons/block_code/serialization/block_script_serialization.gd" id="7_uuuue"] [ext_resource type="Script" path="res://addons/block_code/code_generation/variable_definition.gd" id="9_lo3p1"] -[ext_resource type="PackedScene" uid="uid://c7l70grmkauij" path="res://addons/block_code/examples/spawner/ball.tscn" id="9_xrqll"] +[ext_resource type="PackedScene" uid="uid://c7l70grmkauij" path="res://addons/block_code/examples/pong_game/ball.tscn" id="9_xrqll"] [ext_resource type="Script" path="res://addons/block_code/serialization/value_block_serialization.gd" id="11_yafka"] [ext_resource type="PackedScene" uid="uid://fhoapg3anjsu" path="res://addons/block_code/examples/pong_game/goal_area.tscn" id="12_nqmxu"] [ext_resource type="PackedScene" uid="uid://djmtbm15n2wqq" path="res://addons/block_code/examples/pong_game/player_score.tscn" id="13_jvkp7"] diff --git a/addons/block_code/examples/spawner/ball.tscn b/addons/block_code/examples/spawner/ball.tscn index 4ef4a36d..d66d4c33 100644 --- a/addons/block_code/examples/spawner/ball.tscn +++ b/addons/block_code/examples/spawner/ball.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=4 format=3 uid="uid://c7l70grmkauij"] +[gd_scene load_steps=4 format=3 uid="uid://dhfvkunrlqads"] [ext_resource type="Texture2D" uid="uid://bcgr5amsq3jfl" path="res://addons/block_code/examples/pong_game/assets/ball.png" id="2_xkrmm"] diff --git a/addons/block_code/examples/spawner/spawner.tscn b/addons/block_code/examples/spawner/spawner.tscn index 2a6c6871..b320bc74 100644 --- a/addons/block_code/examples/spawner/spawner.tscn +++ b/addons/block_code/examples/spawner/spawner.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=37 format=3 uid="uid://cbgxxdewi6gld"] [ext_resource type="Script" path="res://addons/block_code/simple_spawner/simple_spawner.gd" id="1_g2l2s"] -[ext_resource type="PackedScene" uid="uid://c7l70grmkauij" path="res://addons/block_code/examples/spawner/ball.tscn" id="2_d0h86"] +[ext_resource type="PackedScene" uid="uid://dhfvkunrlqads" path="res://addons/block_code/examples/spawner/ball.tscn" id="2_d0h86"] [ext_resource type="PackedScene" uid="uid://c8hrliwojohal" path="res://addons/block_code/examples/spawner/volatile_ball.tscn" id="3_tt12o"] [ext_resource type="Script" path="res://addons/block_code/block_code_node/block_code.gd" id="4_e0fbh"] [ext_resource type="Script" path="res://addons/block_code/serialization/block_serialization_tree.gd" id="5_g4h7g"] From c5b3feba049a5e3304948331c10612567b3f92be Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Tue, 22 Oct 2024 15:04:20 -0600 Subject: [PATCH 38/98] Add BlockDefinition translation parser plugin Since BlockDefinitions are generic Resources, Godot doesn't automatically extract translatable strings from them. In order to do that, we need to provide an EditorTranslationParserPlugin that extracts the desired fields so they're included in a POT file. --- addons/block_code/block_code_plugin.gd | 8 +++++ addons/block_code/translation/parser.gd | 40 +++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 addons/block_code/translation/parser.gd diff --git a/addons/block_code/block_code_plugin.gd b/addons/block_code/block_code_plugin.gd index 9ced14ee..9b59196e 100644 --- a/addons/block_code/block_code_plugin.gd +++ b/addons/block_code/block_code_plugin.gd @@ -12,6 +12,9 @@ static var block_code_button: Button const BlockInspectorPlugin := preload("res://addons/block_code/inspector_plugin/block_script_inspector.gd") var block_inspector_plugin: BlockInspectorPlugin +const BlockTranslationParserPlugin := preload("res://addons/block_code/translation/parser.gd") +var _tx_parser_plugin: BlockTranslationParserPlugin + var editor_inspector: EditorInspector var _selected_block_code: BlockCode @@ -41,6 +44,10 @@ func _enter_tree(): block_inspector_plugin = BlockInspectorPlugin.new() add_inspector_plugin(block_inspector_plugin) + if not _tx_parser_plugin: + _tx_parser_plugin = BlockTranslationParserPlugin.new() + add_translation_parser_plugin(_tx_parser_plugin) + # Remove unwanted class nodes from create node old_feature_profile = EditorInterface.get_current_feature_profile() @@ -69,6 +76,7 @@ func script_window_requested(script: String): func _exit_tree(): + remove_translation_parser_plugin(_tx_parser_plugin) remove_inspector_plugin(block_inspector_plugin) if block_code_button: diff --git a/addons/block_code/translation/parser.gd b/addons/block_code/translation/parser.gd new file mode 100644 index 00000000..2afa3d64 --- /dev/null +++ b/addons/block_code/translation/parser.gd @@ -0,0 +1,40 @@ +@tool +## BlockCode translation parser plugin. +## +## Extracts translatable strings from BlockCode resources. Currently only +## BlockDefinition resources are handled. +extends EditorTranslationParserPlugin + +const BLOCK_DEFINITION_SCRIPT_PATH := "res://addons/block_code/code_generation/block_definition.gd" + +# BlockDefinition properties for translation +const block_def_tx_properties: Array[String] = [ + "category", + "description", + "display_template", +] + + +func _get_recognized_extensions() -> PackedStringArray: + # BlockDefinition resources currently use the generic tres extension. + return ["tres"] + + +func _resource_is_block_definition(resource: Resource) -> bool: + var script := resource.get_script() + if not script: + return false + return script.resource_path == BLOCK_DEFINITION_SCRIPT_PATH + + +func _parse_file(path: String, msgids: Array[String], msgids_context_plural: Array[Array]) -> void: + # Only BlockDefinition resources are supported. + var res = ResourceLoader.load(path, "Resource") + if not res or not _resource_is_block_definition(res): + return + for prop in block_def_tx_properties: + var value: String = res.get(prop) + if value: + # For now just the messages are used. It might be better to provide + # context with msgids_context_plural to avoid conflicts. + msgids.append(value) From 40d6c231f098788ed3b7092be8e449bff16bb866 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Wed, 30 Oct 2024 13:21:49 -0600 Subject: [PATCH 39/98] Add translation utilities These add utilities for using translations with Godot 4.4's TranslationDomain support. Besides helpers to access the translation domain, there are also utilities to load the translations from PO files. Much of the code is there to run on pre-4.4 Godot without causing errors. --- addons/block_code/translation/utils.gd | 107 +++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 addons/block_code/translation/utils.gd diff --git a/addons/block_code/translation/utils.gd b/addons/block_code/translation/utils.gd new file mode 100644 index 00000000..c463423a --- /dev/null +++ b/addons/block_code/translation/utils.gd @@ -0,0 +1,107 @@ +## BlockCode translation utilities. +extends Object + +# FIXME: All of this depends on TranslationDomain support in Godot 4.4. When +# that's the minimum supported version, use regular method calls and add +# typing. + +## BlockCode translation domain name +const DOMAIN := &"godot_block_coding" + +## BlockCode locale directory path +const LOCALE_DIR_PATH := "res://addons/block_code/locale" + + +## Get the BlockCode translation domain. +## +## The domain is only returned when running in the editor since the +## translations are only loaded by the editor plugin. +## +## Prior to Godot 4.4, this will return null. +static func get_domain(): + if not Engine.is_editor_hint(): + return null + if not TranslationServer.has_method(&"get_or_add_domain"): + return null + return TranslationServer.call(&"get_or_add_domain", DOMAIN) + + +## Returns the BlockCode domain's translation for the message and context. +## +## This can be used in a static context instead of [method Object.tr]. When +## called outside of the editor, [method TranslationServer.translate] is used. +static func translate(message: StringName, context: StringName = &"") -> StringName: + var domain = get_domain() + if domain: + return domain.translate(message, context) + return TranslationServer.translate(message, context) + + +## Returns the BlockCode domain's translation for the message, plural message and context. +## +## This can be used in a static context instead of [method Object.tr_n]. When +## called outside of the editor, [method TranslationServer.translate_plural] is +## used. +static func translate_plural(message: StringName, message_plural: StringName, n: int, context: StringName = &"") -> StringName: + var domain = get_domain() + if domain: + return domain.translate_plural(message, message_plural, n, context) + return TranslationServer.translate_plural(message, message_plural, n, context) + + +## Load BlockCode translations. +## +## Loads all PO files in the locale directory and adds them to the BlockCode +## translation domain. +## +## This function has no effect prior to Godot 4.4. +static func load_translations(): + var domain = get_domain() + if not domain: + return + + var locale_dir := DirAccess.open(LOCALE_DIR_PATH) + if not locale_dir: + push_warning("Could not open BlockCode locale directory %s" % LOCALE_DIR_PATH) + return + for name in locale_dir.get_files(): + if name.get_extension() != "po": + continue + var po_path := LOCALE_DIR_PATH.path_join(name) + var po = load(po_path) + if not po: + push_warning("Could not load BlockCode translations from %s" % po_path) + continue + + print_verbose("Adding %s %s translations from %s" % [DOMAIN, po.locale, po_path]) + domain.add_translation(po) + + +## Unload BlockCode translations. +## +## Clears all translations from the BlockCode translation domain. +## +## This function has no effect prior to Godot 4.4. +static func unload_translations(): + var domain = get_domain() + if not domain: + return + + print_verbose("Clearing all BlockCode translations") + domain.clear() + + +## Set Object translation domain for BlockCode. +## +## This makes the object use the BlockCode translation domain. If the object is +## a Node, all of its descendents will inherit the translation domain by +## default. The domain is only set when running in the editor since the +## translations are only loaded by the editor plugin. +## +## This function has no effect prior to Godot 4.4. +static func set_block_translation_domain(obj: Object): + if not Engine.is_editor_hint(): + return + if obj.has_method(&"set_translation_domain"): + print_verbose("Setting %s translation domain to %s" % [obj, DOMAIN]) + obj.call(&"set_translation_domain", DOMAIN) From 50b093acf5edd2f15a5da621ee2aed0b8329867f Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Wed, 30 Oct 2024 13:31:46 -0600 Subject: [PATCH 40/98] Load translations when initializing plugin This will add the godot_block_coding translation domain and include translations from any PO files in the locale directory. This is done during plugin initialization so that the translations are loaded before any component tries to translate a string. --- addons/block_code/block_code_plugin.gd | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/addons/block_code/block_code_plugin.gd b/addons/block_code/block_code_plugin.gd index 9b59196e..8158a36f 100644 --- a/addons/block_code/block_code_plugin.gd +++ b/addons/block_code/block_code_plugin.gd @@ -4,6 +4,7 @@ extends EditorPlugin const MainPanelScene := preload("res://addons/block_code/ui/main_panel.tscn") const MainPanel = preload("res://addons/block_code/ui/main_panel.gd") const Types = preload("res://addons/block_code/types/types.gd") +const TxUtils := preload("res://addons/block_code/translation/utils.gd") const ScriptWindow := preload("res://addons/block_code/ui/script_window/script_window.tscn") static var main_panel: MainPanel @@ -32,6 +33,10 @@ const DISABLED_CLASSES := [ ] +func _init(): + TxUtils.load_translations() + + func _enter_tree(): Types.init_cast_graph() From e854330435f3f0052fb89f16b5c0673c4cd00a27 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Wed, 30 Oct 2024 14:44:06 -0600 Subject: [PATCH 41/98] Set translation domain on top level nodes Nodes inherit the translation domain of their parent by default, so setting our translation domain on a few top level nodes will make all of our nodes translated. The domain is set in _init() to ensure that child nodes inherit the domain before they start translating strings. --- addons/block_code/block_code_node/block_code.gd | 6 ++++++ addons/block_code/block_code_plugin.gd | 1 + addons/block_code/ui/main_panel.gd | 5 +++++ 3 files changed, 12 insertions(+) diff --git a/addons/block_code/block_code_node/block_code.gd b/addons/block_code/block_code_node/block_code.gd index 97f81e7d..659719c9 100644 --- a/addons/block_code/block_code_node/block_code.gd +++ b/addons/block_code/block_code_node/block_code.gd @@ -3,9 +3,15 @@ class_name BlockCode extends Node +const TxUtils := preload("res://addons/block_code/translation/utils.gd") + @export var block_script: BlockScriptSerialization = null +func _init(): + TxUtils.set_block_translation_domain(self) + + func _ready(): if Engine.is_editor_hint(): return diff --git a/addons/block_code/block_code_plugin.gd b/addons/block_code/block_code_plugin.gd index 8158a36f..9a3eefbf 100644 --- a/addons/block_code/block_code_plugin.gd +++ b/addons/block_code/block_code_plugin.gd @@ -35,6 +35,7 @@ const DISABLED_CLASSES := [ func _init(): TxUtils.load_translations() + TxUtils.set_block_translation_domain(self) func _enter_tree(): diff --git a/addons/block_code/ui/main_panel.gd b/addons/block_code/ui/main_panel.gd index c3185394..e276107d 100644 --- a/addons/block_code/ui/main_panel.gd +++ b/addons/block_code/ui/main_panel.gd @@ -9,6 +9,7 @@ const BlocksCatalog = preload("res://addons/block_code/code_generation/blocks_ca const DragManager = preload("res://addons/block_code/drag_manager/drag_manager.gd") const Picker = preload("res://addons/block_code/ui/picker/picker.gd") const TitleBar = preload("res://addons/block_code/ui/title_bar/title_bar.gd") +const TxUtils := preload("res://addons/block_code/translation/utils.gd") const VariableDefinition = preload("res://addons/block_code/code_generation/variable_definition.gd") @onready var _context := BlockEditorContext.get_default() @@ -40,6 +41,10 @@ var undo_redo: EditorUndoRedoManager: undo_redo.version_changed.connect(_on_undo_redo_version_changed) +func _init(): + TxUtils.set_block_translation_domain(self) + + func _ready(): _context.changed.connect(_on_context_changed) From 531cbbf6261679d6c556e94fac717ce34eac1019 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Wed, 30 Oct 2024 14:48:11 -0600 Subject: [PATCH 42/98] inspector_plugin: Translate button text Since the inspector plugin isn't a child of our UI, it needs to have the translation domain set explicitly. --- .../block_code/inspector_plugin/block_script_inspector.gd | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/addons/block_code/inspector_plugin/block_script_inspector.gd b/addons/block_code/inspector_plugin/block_script_inspector.gd index bb073fa4..da085bbf 100644 --- a/addons/block_code/inspector_plugin/block_script_inspector.gd +++ b/addons/block_code/inspector_plugin/block_script_inspector.gd @@ -1,6 +1,11 @@ extends EditorInspectorPlugin const BlockCodePlugin = preload("res://addons/block_code/block_code_plugin.gd") +const TxUtils := preload("res://addons/block_code/translation/utils.gd") + + +func _init(): + TxUtils.set_block_translation_domain(self) func _can_handle(object): @@ -11,7 +16,7 @@ func _parse_begin(object): var block_code := object as BlockCode var button := Button.new() - button.text = "Open Block Script" + button.text = tr("Open Block Script") button.pressed.connect(func(): BlockCodePlugin.main_panel.switch_block_code_node(block_code)) var container := MarginContainer.new() From 3e208d75ccb761d936b3126082407632dc09d7ec Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Wed, 30 Oct 2024 14:54:43 -0600 Subject: [PATCH 43/98] ui: Translate displayed block and category strings We want the strings in the BlockDefinition to stay untranslated and only translate them when being displayed in the UI. --- addons/block_code/ui/blocks/block/block.gd | 7 ++++--- .../ui/picker/categories/block_category_button.gd | 2 +- .../ui/picker/categories/block_category_display.gd | 3 +-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/block_code/ui/blocks/block/block.gd b/addons/block_code/ui/blocks/block/block.gd index 38123c5c..198df289 100644 --- a/addons/block_code/ui/blocks/block/block.gd +++ b/addons/block_code/ui/blocks/block/block.gd @@ -118,7 +118,7 @@ func _get_format_string() -> String: if not definition: return "" - return definition.display_template + return tr(definition.display_template) func _get_parameter_defaults() -> Dictionary: @@ -217,10 +217,11 @@ func _get_tooltip(at_position: Vector2) -> String: if not definition: return "" + var description_tx := tr(definition.description) if definition.variant_type == Variant.Type.TYPE_NIL: - return definition.description + return description_tx - return "{description}\n\nType: [b]{type}[/b]".format({"description": definition.description, "type": type_string(definition.variant_type)}) + return "{description}\n\n{type_field}: [b]{type}[/b]".format({"description": description_tx, "type_field": tr("Type:"), "type": type_string(definition.variant_type)}) func _make_custom_tooltip(for_text) -> Control: diff --git a/addons/block_code/ui/picker/categories/block_category_button.gd b/addons/block_code/ui/picker/categories/block_category_button.gd index 8c82209f..4edb3123 100644 --- a/addons/block_code/ui/picker/categories/block_category_button.gd +++ b/addons/block_code/ui/picker/categories/block_category_button.gd @@ -21,7 +21,7 @@ func _ready(): new_stylebox.bg_color = category.color _panel.add_theme_stylebox_override("panel", new_stylebox) - _label.text = category.name + _label.text = tr(category.name) func _on_button_pressed(): diff --git a/addons/block_code/ui/picker/categories/block_category_display.gd b/addons/block_code/ui/picker/categories/block_category_display.gd index beac0648..c534ea9d 100644 --- a/addons/block_code/ui/picker/categories/block_category_display.gd +++ b/addons/block_code/ui/picker/categories/block_category_display.gd @@ -21,7 +21,6 @@ var _blocks: Dictionary # String, Block func _ready(): - _label.text = title # category.name if category != null else "" _update_label() _update_blocks() @@ -40,7 +39,7 @@ func _update_label(): if not _label: return - _label.text = title + _label.text = tr(title) func _update_blocks(): From 7d5a53e3a7ca66c80b92c05ec95bb4192c23b191 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Wed, 30 Oct 2024 17:05:15 -0600 Subject: [PATCH 44/98] variable_dialog: Disable translation of input fields Neither the user's entered variable name nor the type string should be translated, so set auto_translate_mode to disabled. --- .../categories/variable_category/create_variable_dialog.tscn | 3 +++ 1 file changed, 3 insertions(+) diff --git a/addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn b/addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn index 0ccb15ab..41c5a32d 100644 --- a/addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +++ b/addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn @@ -27,6 +27,7 @@ text = "Name " [node name="VariableInput" type="LineEdit" parent="VBoxContainer/GridContainer"] unique_name_in_owner = true +auto_translate_mode = 2 layout_mode = 2 focus_neighbor_bottom = NodePath("../TypeOption") focus_next = NodePath("../TypeOption") @@ -37,6 +38,7 @@ text = "Type " [node name="TypeOption" type="OptionButton" parent="VBoxContainer/GridContainer"] unique_name_in_owner = true +auto_translate_mode = 2 layout_mode = 2 size_flags_horizontal = 3 focus_neighbor_top = NodePath("../VariableInput") @@ -44,6 +46,7 @@ focus_previous = NodePath("../VariableInput") selected = 0 item_count = 6 popup/item_0/text = "STRING" +popup/item_0/id = 0 popup/item_1/text = "BOOL" popup/item_1/id = 1 popup/item_2/text = "INT" From c2eba9740cbc83eb0500f39a8c70ccca0c3d814d Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Wed, 30 Oct 2024 22:49:50 -0600 Subject: [PATCH 45/98] ParameterInput: Disable translation of input fields These represent block argument values and shouldn't be translated. --- .../blocks/utilities/parameter_input/parameter_input.tscn | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn b/addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn index 1dd1c812..a243ac9a 100644 --- a/addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +++ b/addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn @@ -67,6 +67,7 @@ theme_override_constants/margin_bottom = 4 [node name="LineEdit" type="LineEdit" parent="InputSwitcher/TextInput"] unique_name_in_owner = true +auto_translate_mode = 2 layout_mode = 2 mouse_filter = 1 theme_override_colors/font_placeholder_color = Color(0.76662, 0.76662, 0.76662, 1) @@ -98,6 +99,7 @@ drag_outside = true [node name="OptionInput" type="OptionButton" parent="InputSwitcher"] unique_name_in_owner = true +auto_translate_mode = 2 visible = false custom_minimum_size = Vector2(40, 0) layout_mode = 2 @@ -136,6 +138,7 @@ size_flags_horizontal = 3 [node name="XLineEdit" type="LineEdit" parent="InputSwitcher/Vector2Input/HBoxContainer"] unique_name_in_owner = true +auto_translate_mode = 2 layout_mode = 2 mouse_filter = 1 theme_override_colors/font_placeholder_color = Color(0.76662, 0.76662, 0.76662, 1) @@ -177,6 +180,7 @@ size_flags_horizontal = 3 [node name="YLineEdit" type="LineEdit" parent="InputSwitcher/Vector2Input/HBoxContainer"] unique_name_in_owner = true +auto_translate_mode = 2 layout_mode = 2 mouse_filter = 1 theme_override_colors/font_placeholder_color = Color(0.76662, 0.76662, 0.76662, 1) @@ -206,6 +210,7 @@ theme_override_constants/margin_left = 8 [node name="BoolInputOption" type="OptionButton" parent="InputSwitcher/BoolInput"] unique_name_in_owner = true +auto_translate_mode = 2 custom_minimum_size = Vector2(60, 0) layout_mode = 2 theme_override_colors/font_hover_pressed_color = Color(0.117647, 0.117647, 0.117647, 1) @@ -221,6 +226,7 @@ action_mode = 1 selected = 0 item_count = 2 popup/item_0/text = "false" +popup/item_0/id = 0 popup/item_1/text = "true" popup/item_1/id = 1 From d7f50c4a3f28aba7e59df0b8c78f4187a50e82a8 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Wed, 30 Oct 2024 17:11:34 -0600 Subject: [PATCH 46/98] Avoid translating empty strings Workaround an issue with POT generation where the empty string is extracted for translation. Using str() avoids POT generation since the string isn't evaluated at compile time. See https://github.com/godotengine/godot-proposals/issues/10590. --- .../block_code/simple_nodes/simple_ending/simple_ending.gd | 7 ++++--- .../categories/variable_category/create_variable_dialog.gd | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/addons/block_code/simple_nodes/simple_ending/simple_ending.gd b/addons/block_code/simple_nodes/simple_ending/simple_ending.gd index e46fba50..b70333f2 100644 --- a/addons/block_code/simple_nodes/simple_ending/simple_ending.gd +++ b/addons/block_code/simple_nodes/simple_ending/simple_ending.gd @@ -21,12 +21,13 @@ func game_over(result: String): "LOSE": text = lose_message _: - text = "" + reset() push_warning('Unrecognized game result "%s"' % result) func reset(): - text = "" + # Workaround for POT generation extracting empty string. + text = str("") func _ready(): @@ -51,7 +52,7 @@ func _enter_tree(): if Engine.is_editor_hint(): text = win_message else: - text = "" + reset() func get_custom_class(): diff --git a/addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd b/addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd index 8383bbb5..aba2931d 100644 --- a/addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +++ b/addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd @@ -28,7 +28,8 @@ func _ready(): func _clear(): - _variable_input.text = "" + # Workaround for POT generation extracting empty string. + _variable_input.text = str("") get_ok_button().disabled = check_errors(_variable_input.text) _type_option.select(0) From 4ed2a6c83786ba4bc21c3a53765c68b823de2531 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Wed, 30 Oct 2024 11:56:00 -0600 Subject: [PATCH 47/98] Add tool to regenerate POT file Currently the only way to regenerate a POT file is to go through the Regenerate POT dialog in the Localization tab of the Project Settings. This adds a Project->Tools menu item that drives the dialog from code using our POT file path. Hat tip to KoBeWi for the procedure. Hopefully in the future we'll have a Godot CLI interface to do this. --- addons/block_code/block_code_plugin.gd | 3 +++ addons/block_code/translation/utils.gd | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/addons/block_code/block_code_plugin.gd b/addons/block_code/block_code_plugin.gd index 9a3eefbf..e66f6032 100644 --- a/addons/block_code/block_code_plugin.gd +++ b/addons/block_code/block_code_plugin.gd @@ -54,6 +54,9 @@ func _enter_tree(): _tx_parser_plugin = BlockTranslationParserPlugin.new() add_translation_parser_plugin(_tx_parser_plugin) + # Custom Project->Tools menu items. + add_tool_menu_item(tr("Regenerate %s POT file") % "BlockCode", TxUtils.regenerate_pot_file) + # Remove unwanted class nodes from create node old_feature_profile = EditorInterface.get_current_feature_profile() diff --git a/addons/block_code/translation/utils.gd b/addons/block_code/translation/utils.gd index c463423a..c5f4fe8d 100644 --- a/addons/block_code/translation/utils.gd +++ b/addons/block_code/translation/utils.gd @@ -11,6 +11,9 @@ const DOMAIN := &"godot_block_coding" ## BlockCode locale directory path const LOCALE_DIR_PATH := "res://addons/block_code/locale" +## BlockCode POT file path +const POT_FILE_PATH := "res://addons/block_code/locale/godot_block_coding.pot" + ## Get the BlockCode translation domain. ## @@ -105,3 +108,19 @@ static func set_block_translation_domain(obj: Object): if obj.has_method(&"set_translation_domain"): print_verbose("Setting %s translation domain to %s" % [obj, DOMAIN]) obj.call(&"set_translation_domain", DOMAIN) + + +## Regenerate BlockCode POT file. +## +## Update the BlockCode POT file to include new translatable strings. +static func regenerate_pot_file(): + # Dirty method to drive the editor's Generate POT dialog from + # https://github.com/godotengine/godot-proposals/issues/10986#issuecomment-2419914451 + # + # Obviously this is pretty fragile since it depends on the editor's UI + # remaining stable. Hopefully in the future we can just do this from the + # command line. See https://github.com/godotengine/godot/pull/98422. + var localization := EditorInterface.get_base_control().find_child("*Localization*", true, false) + var file_dialog: EditorFileDialog = localization.get_child(5) + print(translate("Updating %s POT file %s") % ["BlockCode", POT_FILE_PATH]) + file_dialog.file_selected.emit(POT_FILE_PATH) From ab90d9f08b510dacf6bc1bc1bbbdfcd6c121bc28 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Wed, 30 Oct 2024 12:46:54 -0600 Subject: [PATCH 48/98] Add tool to update POT files The list of translated files to include in the POT file is stored in the project settings. The primary way to update it is through the POT Generation dialog when a new file is added, but we know that we generally want to add all of the plugin's files for translation. This adds a Project->Tools menu item that finds all the relevant files and updates the project setting. --- addons/block_code/block_code_plugin.gd | 1 + addons/block_code/translation/utils.gd | 33 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/addons/block_code/block_code_plugin.gd b/addons/block_code/block_code_plugin.gd index e66f6032..ff960f1c 100644 --- a/addons/block_code/block_code_plugin.gd +++ b/addons/block_code/block_code_plugin.gd @@ -56,6 +56,7 @@ func _enter_tree(): # Custom Project->Tools menu items. add_tool_menu_item(tr("Regenerate %s POT file") % "BlockCode", TxUtils.regenerate_pot_file) + add_tool_menu_item(tr("Update %s translated files") % "BlockCode", TxUtils.update_pot_files) # Remove unwanted class nodes from create node old_feature_profile = EditorInterface.get_current_feature_profile() diff --git a/addons/block_code/translation/utils.gd b/addons/block_code/translation/utils.gd index c5f4fe8d..e2ba36f4 100644 --- a/addons/block_code/translation/utils.gd +++ b/addons/block_code/translation/utils.gd @@ -14,6 +14,9 @@ const LOCALE_DIR_PATH := "res://addons/block_code/locale" ## BlockCode POT file path const POT_FILE_PATH := "res://addons/block_code/locale/godot_block_coding.pot" +## ProjectSetting containing the POT files array +const POT_FILES_SETTING := "internationalization/locale/translations_pot_files" + ## Get the BlockCode translation domain. ## @@ -124,3 +127,33 @@ static func regenerate_pot_file(): var file_dialog: EditorFileDialog = localization.get_child(5) print(translate("Updating %s POT file %s") % ["BlockCode", POT_FILE_PATH]) file_dialog.file_selected.emit(POT_FILE_PATH) + + +static func _add_pot_files_recursive(pot_files: PackedStringArray, path: String): + # Make sure we're only operating in the block_code directory. + if not path.begins_with("res://addons/block_code"): + push_error("Cannot add POT files from %s" % path) + return + + # Add specific file extensions to POT files. + for name in DirAccess.get_files_at(path): + if name.get_extension() in ["gd", "tres", "tscn"]: + var child_path := path.path_join(name) + print_verbose("Adding POT file %s" % child_path) + pot_files.append(child_path) + + # Descend to subdirs. + for name in DirAccess.get_directories_at(path): + _add_pot_files_recursive(pot_files, path.path_join(name)) + + +## Update BlockCode POT files. +## +## Update the array of POT files for the BlockCode plugin. All gd, tres +## and tscn files in the plugin are added. +static func update_pot_files(): + var pot_files: PackedStringArray + _add_pot_files_recursive(pot_files, "res://addons/block_code") + print(translate("Updating POT files setting %s") % POT_FILES_SETTING) + ProjectSettings.set_setting(POT_FILES_SETTING, pot_files) + ProjectSettings.save() From deabb020f6342ba38314e58abb869c274200c87c Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Wed, 30 Oct 2024 15:43:59 -0600 Subject: [PATCH 49/98] Add translated files and update POT file This is the result of running TxUtils.update_pot_files() and TxUtils.regenerate_pot_file() via the Project->Tools menu. There are definitely some strings extracted from scene files that we don't want translated, but I'm not sure the best way to do that without completely taking over scene file parsing. Just ignore the issue for now... --- .../block_code/locale/godot_block_coding.pot | 837 ++++++++++++++++++ project.godot | 4 + 2 files changed, 841 insertions(+) create mode 100644 addons/block_code/locale/godot_block_coding.pot diff --git a/addons/block_code/locale/godot_block_coding.pot b/addons/block_code/locale/godot_block_coding.pot new file mode 100644 index 00000000..5e4122e0 --- /dev/null +++ b/addons/block_code/locale/godot_block_coding.pot @@ -0,0 +1,837 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "Move the character up, down, left, and right with the keyboard using the given keys. The speed of movement can be adjusted separately for x (left and right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "Generate a random floating point number between [i]from[/i] and [i]to[/i] inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "Generate a random signed 32-bits integer number between [i]from[/i] and [i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "Multiplies a vector with a number. Use this, for example, to get a point some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale {pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/project.godot b/project.godot index 4e23f05a..2e1d309c 100644 --- a/project.godot +++ b/project.godot @@ -19,6 +19,10 @@ config/icon="res://icon.svg" enabled=PackedStringArray("res://addons/block_code/plugin.cfg", "res://addons/gut/plugin.cfg", "res://addons/plugin_refresher/plugin.cfg") +[internationalization] + +locale/translations_pot_files=PackedStringArray("res://addons/block_code/block_code_plugin.gd", "res://addons/block_code/block_code_node/block_code.gd", "res://addons/block_code/blocks/communication/add_node_to_group.tres", "res://addons/block_code/blocks/communication/add_to_group.tres", "res://addons/block_code/blocks/communication/area2d_on_entered.tres", "res://addons/block_code/blocks/communication/area2d_on_exited.tres", "res://addons/block_code/blocks/communication/call_method_group.tres", "res://addons/block_code/blocks/communication/call_method_node.tres", "res://addons/block_code/blocks/communication/define_method.tres", "res://addons/block_code/blocks/communication/get_node.gd", "res://addons/block_code/blocks/communication/get_node.tres", "res://addons/block_code/blocks/communication/groups.gd", "res://addons/block_code/blocks/communication/is_in_group.tres", "res://addons/block_code/blocks/communication/is_node_in_group.tres", "res://addons/block_code/blocks/communication/remove_from_group.tres", "res://addons/block_code/blocks/communication/remove_node_from_group.tres", "res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres", "res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres", "res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres", "res://addons/block_code/blocks/graphics/animationplayer_pause.tres", "res://addons/block_code/blocks/graphics/animationplayer_play.gd", "res://addons/block_code/blocks/graphics/animationplayer_play.tres", "res://addons/block_code/blocks/graphics/animationplayer_stop.tres", "res://addons/block_code/blocks/graphics/viewport_center.tres", "res://addons/block_code/blocks/graphics/viewport_height.tres", "res://addons/block_code/blocks/graphics/viewport_width.tres", "res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres", "res://addons/block_code/blocks/input/characterbody2d_move.tres", "res://addons/block_code/blocks/input/is_input_actioned.gd", "res://addons/block_code/blocks/input/is_input_actioned.tres", "res://addons/block_code/blocks/lifecycle/process.tres", "res://addons/block_code/blocks/lifecycle/queue_free.tres", "res://addons/block_code/blocks/lifecycle/queue_free_node.tres", "res://addons/block_code/blocks/lifecycle/ready.tres", "res://addons/block_code/blocks/log/breakpoint.tres", "res://addons/block_code/blocks/log/concat.tres", "res://addons/block_code/blocks/log/print.tres", "res://addons/block_code/blocks/logic/and.tres", "res://addons/block_code/blocks/logic/compare.tres", "res://addons/block_code/blocks/logic/else.tres", "res://addons/block_code/blocks/logic/else_if.tres", "res://addons/block_code/blocks/logic/if.tres", "res://addons/block_code/blocks/logic/not.tres", "res://addons/block_code/blocks/logic/or.tres", "res://addons/block_code/blocks/loops/await_scene_ready.tres", "res://addons/block_code/blocks/loops/break.tres", "res://addons/block_code/blocks/loops/continue.tres", "res://addons/block_code/blocks/loops/for.tres", "res://addons/block_code/blocks/loops/while.tres", "res://addons/block_code/blocks/math/add.tres", "res://addons/block_code/blocks/math/cos.tres", "res://addons/block_code/blocks/math/divide.tres", "res://addons/block_code/blocks/math/multiply.tres", "res://addons/block_code/blocks/math/pow.tres", "res://addons/block_code/blocks/math/randf_range.tres", "res://addons/block_code/blocks/math/randi_range.tres", "res://addons/block_code/blocks/math/sin.tres", "res://addons/block_code/blocks/math/subtract.tres", "res://addons/block_code/blocks/math/tan.tres", "res://addons/block_code/blocks/math/vector2_x.tres", "res://addons/block_code/blocks/math/vector2_y.tres", "res://addons/block_code/blocks/math/vector_from_angle.tres", "res://addons/block_code/blocks/math/vector_multiply.tres", "res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres", "res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres", "res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres", "res://addons/block_code/blocks/sounds/load_sound.tres", "res://addons/block_code/blocks/sounds/pause_continue_sound.tres", "res://addons/block_code/blocks/sounds/play_sound.tres", "res://addons/block_code/blocks/sounds/stop_sound.tres", "res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres", "res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres", "res://addons/block_code/blocks/ui/label_set_text.tres", "res://addons/block_code/blocks/variables/vector2.tres", "res://addons/block_code/code_generation/ast_list.gd", "res://addons/block_code/code_generation/block_ast.gd", "res://addons/block_code/code_generation/block_definition.gd", "res://addons/block_code/code_generation/block_extension.gd", "res://addons/block_code/code_generation/blocks_catalog.gd", "res://addons/block_code/code_generation/option_data.gd", "res://addons/block_code/code_generation/script_generator.gd", "res://addons/block_code/code_generation/util.gd", "res://addons/block_code/code_generation/variable_definition.gd", "res://addons/block_code/drag_manager/drag.gd", "res://addons/block_code/drag_manager/drag_manager.gd", "res://addons/block_code/drag_manager/drag_manager.tscn", "res://addons/block_code/examples/pong_game/ball.tscn", "res://addons/block_code/examples/pong_game/goal_area.tscn", "res://addons/block_code/examples/pong_game/player_score.tscn", "res://addons/block_code/examples/pong_game/pong_game.tscn", "res://addons/block_code/examples/pong_game/space.tscn", "res://addons/block_code/examples/spawner/ball.tscn", "res://addons/block_code/examples/spawner/spawner.tscn", "res://addons/block_code/examples/spawner/volatile_ball.tscn", "res://addons/block_code/inspector_plugin/block_script_inspector.gd", "res://addons/block_code/serialization/block_script_serialization.gd", "res://addons/block_code/serialization/block_serialization.gd", "res://addons/block_code/serialization/block_serialization_tree.gd", "res://addons/block_code/serialization/default_block_script.tres", "res://addons/block_code/serialization/value_block_serialization.gd", "res://addons/block_code/simple_nodes/simple_character/simple_character.gd", "res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd", "res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd", "res://addons/block_code/simple_spawner/simple_spawner.gd", "res://addons/block_code/translation/parser.gd", "res://addons/block_code/translation/utils.gd", "res://addons/block_code/types/types.gd", "res://addons/block_code/ui/block_editor_context.gd", "res://addons/block_code/ui/block_tree_util.gd", "res://addons/block_code/ui/constants.gd", "res://addons/block_code/ui/main_panel.gd", "res://addons/block_code/ui/main_panel.tscn", "res://addons/block_code/ui/util.gd", "res://addons/block_code/ui/block_canvas/block_canvas.gd", "res://addons/block_code/ui/block_canvas/block_canvas.tscn", "res://addons/block_code/ui/blocks/block/block.gd", "res://addons/block_code/ui/blocks/control_block/control_block.gd", "res://addons/block_code/ui/blocks/control_block/control_block.tscn", "res://addons/block_code/ui/blocks/entry_block/entry_block.gd", "res://addons/block_code/ui/blocks/entry_block/entry_block.tscn", "res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd", "res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn", "res://addons/block_code/ui/blocks/statement_block/statement_block.gd", "res://addons/block_code/ui/blocks/statement_block/statement_block.tscn", "res://addons/block_code/ui/blocks/utilities/background/background.gd", "res://addons/block_code/ui/blocks/utilities/background/gutter.gd", "res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd", "res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn", "res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd", "res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn", "res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd", "res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn", "res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd", "res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn", "res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd", "res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn", "res://addons/block_code/ui/picker/picker.gd", "res://addons/block_code/ui/picker/picker.tscn", "res://addons/block_code/ui/picker/categories/block_category.gd", "res://addons/block_code/ui/picker/categories/block_category_button.gd", "res://addons/block_code/ui/picker/categories/block_category_button.tscn", "res://addons/block_code/ui/picker/categories/block_category_display.gd", "res://addons/block_code/ui/picker/categories/block_category_display.tscn", "res://addons/block_code/ui/picker/categories/category_factory.gd", "res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd", "res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn", "res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd", "res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn", "res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd", "res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn", "res://addons/block_code/ui/script_window/script_window.gd", "res://addons/block_code/ui/script_window/script_window.tscn", "res://addons/block_code/ui/title_bar/title_bar.gd", "res://addons/block_code/ui/title_bar/title_bar.tscn", "res://addons/block_code/ui/tooltip/tooltip.gd", "res://addons/block_code/ui/tooltip/tooltip.tscn") + [rendering] renderer/rendering_method="gl_compatibility" From 0c044ac3b2663f6ca4d3b234a92b09db6da03d14 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Wed, 30 Oct 2024 17:16:16 -0600 Subject: [PATCH 50/98] locale: Create common message catalogs Create message catalogs for all the locales supported in the Godot editor except for es_AR and pt_BR. Due to a bug in Godot's locale matching[1], these would be preferred over the country-less variants for all countries. For example, the pt_BR translation would be used for pt_PT when the generic pt translation would be preferred. The catalogs were created like so: ``` msginit --no-translator -l $locale -i godot_block_coding.pot -o $locale.po ``` The catalogs are also added to the project settings despite that setting not being used in the editor. Nodes that are used in games such as the simple nodes can still get translations via the main domain this way. 1. https://github.com/godotengine/godot/issues/90677 --- addons/block_code/locale/ar.po | 856 +++++++++++++++++++++++++++++ addons/block_code/locale/bg.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/bn.po | 856 +++++++++++++++++++++++++++++ addons/block_code/locale/ca.po | 856 +++++++++++++++++++++++++++++ addons/block_code/locale/cs.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/de.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/el.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/eo.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/es.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/et.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/fa.po | 856 +++++++++++++++++++++++++++++ addons/block_code/locale/fi.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/fr.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/ga.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/gl.po | 856 +++++++++++++++++++++++++++++ addons/block_code/locale/he.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/hu.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/id.po | 856 +++++++++++++++++++++++++++++ addons/block_code/locale/it.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/ja.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/ka.po | 856 +++++++++++++++++++++++++++++ addons/block_code/locale/ko.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/lv.po | 858 ++++++++++++++++++++++++++++++ addons/block_code/locale/ms.po | 856 +++++++++++++++++++++++++++++ addons/block_code/locale/nb.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/nl.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/pl.po | 858 ++++++++++++++++++++++++++++++ addons/block_code/locale/pt.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/ro.po | 858 ++++++++++++++++++++++++++++++ addons/block_code/locale/ru.po | 858 ++++++++++++++++++++++++++++++ addons/block_code/locale/sk.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/sv.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/th.po | 856 +++++++++++++++++++++++++++++ addons/block_code/locale/tr.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/uk.po | 858 ++++++++++++++++++++++++++++++ addons/block_code/locale/vi.po | 857 +++++++++++++++++++++++++++++ addons/block_code/locale/zh_CN.po | 856 +++++++++++++++++++++++++++++ addons/block_code/locale/zh_TW.po | 856 +++++++++++++++++++++++++++++ project.godot | 1 + 39 files changed, 32561 insertions(+) create mode 100644 addons/block_code/locale/ar.po create mode 100644 addons/block_code/locale/bg.po create mode 100644 addons/block_code/locale/bn.po create mode 100644 addons/block_code/locale/ca.po create mode 100644 addons/block_code/locale/cs.po create mode 100644 addons/block_code/locale/de.po create mode 100644 addons/block_code/locale/el.po create mode 100644 addons/block_code/locale/eo.po create mode 100644 addons/block_code/locale/es.po create mode 100644 addons/block_code/locale/et.po create mode 100644 addons/block_code/locale/fa.po create mode 100644 addons/block_code/locale/fi.po create mode 100644 addons/block_code/locale/fr.po create mode 100644 addons/block_code/locale/ga.po create mode 100644 addons/block_code/locale/gl.po create mode 100644 addons/block_code/locale/he.po create mode 100644 addons/block_code/locale/hu.po create mode 100644 addons/block_code/locale/id.po create mode 100644 addons/block_code/locale/it.po create mode 100644 addons/block_code/locale/ja.po create mode 100644 addons/block_code/locale/ka.po create mode 100644 addons/block_code/locale/ko.po create mode 100644 addons/block_code/locale/lv.po create mode 100644 addons/block_code/locale/ms.po create mode 100644 addons/block_code/locale/nb.po create mode 100644 addons/block_code/locale/nl.po create mode 100644 addons/block_code/locale/pl.po create mode 100644 addons/block_code/locale/pt.po create mode 100644 addons/block_code/locale/ro.po create mode 100644 addons/block_code/locale/ru.po create mode 100644 addons/block_code/locale/sk.po create mode 100644 addons/block_code/locale/sv.po create mode 100644 addons/block_code/locale/th.po create mode 100644 addons/block_code/locale/tr.po create mode 100644 addons/block_code/locale/uk.po create mode 100644 addons/block_code/locale/vi.po create mode 100644 addons/block_code/locale/zh_CN.po create mode 100644 addons/block_code/locale/zh_TW.po diff --git a/addons/block_code/locale/ar.po b/addons/block_code/locale/ar.po new file mode 100644 index 00000000..db89300c --- /dev/null +++ b/addons/block_code/locale/ar.po @@ -0,0 +1,856 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ar\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/bg.po b/addons/block_code/locale/bg.po new file mode 100644 index 00000000..14bd8a4f --- /dev/null +++ b/addons/block_code/locale/bg.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: bg\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/bn.po b/addons/block_code/locale/bn.po new file mode 100644 index 00000000..9a299639 --- /dev/null +++ b/addons/block_code/locale/bn.po @@ -0,0 +1,856 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: bn\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/ca.po b/addons/block_code/locale/ca.po new file mode 100644 index 00000000..c45e94e2 --- /dev/null +++ b/addons/block_code/locale/ca.po @@ -0,0 +1,856 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/cs.po b/addons/block_code/locale/cs.po new file mode 100644 index 00000000..06c0cc72 --- /dev/null +++ b/addons/block_code/locale/cs.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/de.po b/addons/block_code/locale/de.po new file mode 100644 index 00000000..396ffee2 --- /dev/null +++ b/addons/block_code/locale/de.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/el.po b/addons/block_code/locale/el.po new file mode 100644 index 00000000..eb3396ce --- /dev/null +++ b/addons/block_code/locale/el.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/eo.po b/addons/block_code/locale/eo.po new file mode 100644 index 00000000..41b1e006 --- /dev/null +++ b/addons/block_code/locale/eo.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: eo\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/es.po b/addons/block_code/locale/es.po new file mode 100644 index 00000000..22609bb1 --- /dev/null +++ b/addons/block_code/locale/es.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/et.po b/addons/block_code/locale/et.po new file mode 100644 index 00000000..6bc01711 --- /dev/null +++ b/addons/block_code/locale/et.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: et\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/fa.po b/addons/block_code/locale/fa.po new file mode 100644 index 00000000..1bf68dd7 --- /dev/null +++ b/addons/block_code/locale/fa.po @@ -0,0 +1,856 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: fa\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/fi.po b/addons/block_code/locale/fi.po new file mode 100644 index 00000000..58a00934 --- /dev/null +++ b/addons/block_code/locale/fi.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/fr.po b/addons/block_code/locale/fr.po new file mode 100644 index 00000000..28f2bed4 --- /dev/null +++ b/addons/block_code/locale/fr.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/ga.po b/addons/block_code/locale/ga.po new file mode 100644 index 00000000..1dfd3dcf --- /dev/null +++ b/addons/block_code/locale/ga.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ga\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/gl.po b/addons/block_code/locale/gl.po new file mode 100644 index 00000000..5cfe0d49 --- /dev/null +++ b/addons/block_code/locale/gl.po @@ -0,0 +1,856 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: gl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/he.po b/addons/block_code/locale/he.po new file mode 100644 index 00000000..98bb5e2a --- /dev/null +++ b/addons/block_code/locale/he.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/hu.po b/addons/block_code/locale/hu.po new file mode 100644 index 00000000..44cc3c74 --- /dev/null +++ b/addons/block_code/locale/hu.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/id.po b/addons/block_code/locale/id.po new file mode 100644 index 00000000..01b39691 --- /dev/null +++ b/addons/block_code/locale/id.po @@ -0,0 +1,856 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: id\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/it.po b/addons/block_code/locale/it.po new file mode 100644 index 00000000..b73ae84a --- /dev/null +++ b/addons/block_code/locale/it.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/ja.po b/addons/block_code/locale/ja.po new file mode 100644 index 00000000..29edb013 --- /dev/null +++ b/addons/block_code/locale/ja.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/ka.po b/addons/block_code/locale/ka.po new file mode 100644 index 00000000..e82ef171 --- /dev/null +++ b/addons/block_code/locale/ka.po @@ -0,0 +1,856 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ka\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/ko.po b/addons/block_code/locale/ko.po new file mode 100644 index 00000000..9f36cca0 --- /dev/null +++ b/addons/block_code/locale/ko.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ko\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/lv.po b/addons/block_code/locale/lv.po new file mode 100644 index 00000000..d99750d4 --- /dev/null +++ b/addons/block_code/locale/lv.po @@ -0,0 +1,858 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: lv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/ms.po b/addons/block_code/locale/ms.po new file mode 100644 index 00000000..5b4445eb --- /dev/null +++ b/addons/block_code/locale/ms.po @@ -0,0 +1,856 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ms\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/nb.po b/addons/block_code/locale/nb.po new file mode 100644 index 00000000..68a34ebd --- /dev/null +++ b/addons/block_code/locale/nb.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: nb\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/nl.po b/addons/block_code/locale/nl.po new file mode 100644 index 00000000..141b8ceb --- /dev/null +++ b/addons/block_code/locale/nl.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/pl.po b/addons/block_code/locale/pl.po new file mode 100644 index 00000000..7f3f6ebb --- /dev/null +++ b/addons/block_code/locale/pl.po @@ -0,0 +1,858 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/pt.po b/addons/block_code/locale/pt.po new file mode 100644 index 00000000..f7e0c27b --- /dev/null +++ b/addons/block_code/locale/pt.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/ro.po b/addons/block_code/locale/ro.po new file mode 100644 index 00000000..40aa27f0 --- /dev/null +++ b/addons/block_code/locale/ro.po @@ -0,0 +1,858 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2;\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/ru.po b/addons/block_code/locale/ru.po new file mode 100644 index 00000000..566395ee --- /dev/null +++ b/addons/block_code/locale/ru.po @@ -0,0 +1,858 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/sk.po b/addons/block_code/locale/sk.po new file mode 100644 index 00000000..b829cbc1 --- /dev/null +++ b/addons/block_code/locale/sk.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/sv.po b/addons/block_code/locale/sv.po new file mode 100644 index 00000000..55d7efa5 --- /dev/null +++ b/addons/block_code/locale/sv.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/th.po b/addons/block_code/locale/th.po new file mode 100644 index 00000000..f35cb3c8 --- /dev/null +++ b/addons/block_code/locale/th.po @@ -0,0 +1,856 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: th\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/tr.po b/addons/block_code/locale/tr.po new file mode 100644 index 00000000..d8ca59b4 --- /dev/null +++ b/addons/block_code/locale/tr.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/uk.po b/addons/block_code/locale/uk.po new file mode 100644 index 00000000..d9f32aa7 --- /dev/null +++ b/addons/block_code/locale/uk.po @@ -0,0 +1,858 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/vi.po b/addons/block_code/locale/vi.po new file mode 100644 index 00000000..388e641a --- /dev/null +++ b/addons/block_code/locale/vi.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: vi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/zh_CN.po b/addons/block_code/locale/zh_CN.po new file mode 100644 index 00000000..a70c14b6 --- /dev/null +++ b/addons/block_code/locale/zh_CN.po @@ -0,0 +1,856 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/zh_TW.po b/addons/block_code/locale/zh_TW.po new file mode 100644 index 00000000..5d91e9da --- /dev/null +++ b/addons/block_code/locale/zh_TW.po @@ -0,0 +1,856 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and " +"right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " +"speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are " +"only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for \"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/project.godot b/project.godot index 2e1d309c..0ea3615e 100644 --- a/project.godot +++ b/project.godot @@ -21,6 +21,7 @@ enabled=PackedStringArray("res://addons/block_code/plugin.cfg", "res://addons/gu [internationalization] +locale/translations=PackedStringArray("res://addons/block_code/locale/ar.po", "res://addons/block_code/locale/bg.po", "res://addons/block_code/locale/bn.po", "res://addons/block_code/locale/ca.po", "res://addons/block_code/locale/cs.po", "res://addons/block_code/locale/de.po", "res://addons/block_code/locale/el.po", "res://addons/block_code/locale/eo.po", "res://addons/block_code/locale/es.po", "res://addons/block_code/locale/et.po", "res://addons/block_code/locale/fa.po", "res://addons/block_code/locale/fi.po", "res://addons/block_code/locale/fr.po", "res://addons/block_code/locale/ga.po", "res://addons/block_code/locale/gl.po", "res://addons/block_code/locale/he.po", "res://addons/block_code/locale/hu.po", "res://addons/block_code/locale/id.po", "res://addons/block_code/locale/it.po", "res://addons/block_code/locale/ja.po", "res://addons/block_code/locale/ka.po", "res://addons/block_code/locale/ko.po", "res://addons/block_code/locale/lv.po", "res://addons/block_code/locale/ms.po", "res://addons/block_code/locale/nb.po", "res://addons/block_code/locale/nl.po", "res://addons/block_code/locale/pl.po", "res://addons/block_code/locale/pt.po", "res://addons/block_code/locale/ro.po", "res://addons/block_code/locale/ru.po", "res://addons/block_code/locale/sk.po", "res://addons/block_code/locale/sv.po", "res://addons/block_code/locale/th.po", "res://addons/block_code/locale/tr.po", "res://addons/block_code/locale/uk.po", "res://addons/block_code/locale/vi.po", "res://addons/block_code/locale/zh_CN.po", "res://addons/block_code/locale/zh_TW.po") locale/translations_pot_files=PackedStringArray("res://addons/block_code/block_code_plugin.gd", "res://addons/block_code/block_code_node/block_code.gd", "res://addons/block_code/blocks/communication/add_node_to_group.tres", "res://addons/block_code/blocks/communication/add_to_group.tres", "res://addons/block_code/blocks/communication/area2d_on_entered.tres", "res://addons/block_code/blocks/communication/area2d_on_exited.tres", "res://addons/block_code/blocks/communication/call_method_group.tres", "res://addons/block_code/blocks/communication/call_method_node.tres", "res://addons/block_code/blocks/communication/define_method.tres", "res://addons/block_code/blocks/communication/get_node.gd", "res://addons/block_code/blocks/communication/get_node.tres", "res://addons/block_code/blocks/communication/groups.gd", "res://addons/block_code/blocks/communication/is_in_group.tres", "res://addons/block_code/blocks/communication/is_node_in_group.tres", "res://addons/block_code/blocks/communication/remove_from_group.tres", "res://addons/block_code/blocks/communication/remove_node_from_group.tres", "res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres", "res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres", "res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres", "res://addons/block_code/blocks/graphics/animationplayer_pause.tres", "res://addons/block_code/blocks/graphics/animationplayer_play.gd", "res://addons/block_code/blocks/graphics/animationplayer_play.tres", "res://addons/block_code/blocks/graphics/animationplayer_stop.tres", "res://addons/block_code/blocks/graphics/viewport_center.tres", "res://addons/block_code/blocks/graphics/viewport_height.tres", "res://addons/block_code/blocks/graphics/viewport_width.tres", "res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres", "res://addons/block_code/blocks/input/characterbody2d_move.tres", "res://addons/block_code/blocks/input/is_input_actioned.gd", "res://addons/block_code/blocks/input/is_input_actioned.tres", "res://addons/block_code/blocks/lifecycle/process.tres", "res://addons/block_code/blocks/lifecycle/queue_free.tres", "res://addons/block_code/blocks/lifecycle/queue_free_node.tres", "res://addons/block_code/blocks/lifecycle/ready.tres", "res://addons/block_code/blocks/log/breakpoint.tres", "res://addons/block_code/blocks/log/concat.tres", "res://addons/block_code/blocks/log/print.tres", "res://addons/block_code/blocks/logic/and.tres", "res://addons/block_code/blocks/logic/compare.tres", "res://addons/block_code/blocks/logic/else.tres", "res://addons/block_code/blocks/logic/else_if.tres", "res://addons/block_code/blocks/logic/if.tres", "res://addons/block_code/blocks/logic/not.tres", "res://addons/block_code/blocks/logic/or.tres", "res://addons/block_code/blocks/loops/await_scene_ready.tres", "res://addons/block_code/blocks/loops/break.tres", "res://addons/block_code/blocks/loops/continue.tres", "res://addons/block_code/blocks/loops/for.tres", "res://addons/block_code/blocks/loops/while.tres", "res://addons/block_code/blocks/math/add.tres", "res://addons/block_code/blocks/math/cos.tres", "res://addons/block_code/blocks/math/divide.tres", "res://addons/block_code/blocks/math/multiply.tres", "res://addons/block_code/blocks/math/pow.tres", "res://addons/block_code/blocks/math/randf_range.tres", "res://addons/block_code/blocks/math/randi_range.tres", "res://addons/block_code/blocks/math/sin.tres", "res://addons/block_code/blocks/math/subtract.tres", "res://addons/block_code/blocks/math/tan.tres", "res://addons/block_code/blocks/math/vector2_x.tres", "res://addons/block_code/blocks/math/vector2_y.tres", "res://addons/block_code/blocks/math/vector_from_angle.tres", "res://addons/block_code/blocks/math/vector_multiply.tres", "res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres", "res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres", "res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres", "res://addons/block_code/blocks/sounds/load_sound.tres", "res://addons/block_code/blocks/sounds/pause_continue_sound.tres", "res://addons/block_code/blocks/sounds/play_sound.tres", "res://addons/block_code/blocks/sounds/stop_sound.tres", "res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres", "res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres", "res://addons/block_code/blocks/ui/label_set_text.tres", "res://addons/block_code/blocks/variables/vector2.tres", "res://addons/block_code/code_generation/ast_list.gd", "res://addons/block_code/code_generation/block_ast.gd", "res://addons/block_code/code_generation/block_definition.gd", "res://addons/block_code/code_generation/block_extension.gd", "res://addons/block_code/code_generation/blocks_catalog.gd", "res://addons/block_code/code_generation/option_data.gd", "res://addons/block_code/code_generation/script_generator.gd", "res://addons/block_code/code_generation/util.gd", "res://addons/block_code/code_generation/variable_definition.gd", "res://addons/block_code/drag_manager/drag.gd", "res://addons/block_code/drag_manager/drag_manager.gd", "res://addons/block_code/drag_manager/drag_manager.tscn", "res://addons/block_code/examples/pong_game/ball.tscn", "res://addons/block_code/examples/pong_game/goal_area.tscn", "res://addons/block_code/examples/pong_game/player_score.tscn", "res://addons/block_code/examples/pong_game/pong_game.tscn", "res://addons/block_code/examples/pong_game/space.tscn", "res://addons/block_code/examples/spawner/ball.tscn", "res://addons/block_code/examples/spawner/spawner.tscn", "res://addons/block_code/examples/spawner/volatile_ball.tscn", "res://addons/block_code/inspector_plugin/block_script_inspector.gd", "res://addons/block_code/serialization/block_script_serialization.gd", "res://addons/block_code/serialization/block_serialization.gd", "res://addons/block_code/serialization/block_serialization_tree.gd", "res://addons/block_code/serialization/default_block_script.tres", "res://addons/block_code/serialization/value_block_serialization.gd", "res://addons/block_code/simple_nodes/simple_character/simple_character.gd", "res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd", "res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd", "res://addons/block_code/simple_spawner/simple_spawner.gd", "res://addons/block_code/translation/parser.gd", "res://addons/block_code/translation/utils.gd", "res://addons/block_code/types/types.gd", "res://addons/block_code/ui/block_editor_context.gd", "res://addons/block_code/ui/block_tree_util.gd", "res://addons/block_code/ui/constants.gd", "res://addons/block_code/ui/main_panel.gd", "res://addons/block_code/ui/main_panel.tscn", "res://addons/block_code/ui/util.gd", "res://addons/block_code/ui/block_canvas/block_canvas.gd", "res://addons/block_code/ui/block_canvas/block_canvas.tscn", "res://addons/block_code/ui/blocks/block/block.gd", "res://addons/block_code/ui/blocks/control_block/control_block.gd", "res://addons/block_code/ui/blocks/control_block/control_block.tscn", "res://addons/block_code/ui/blocks/entry_block/entry_block.gd", "res://addons/block_code/ui/blocks/entry_block/entry_block.tscn", "res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd", "res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn", "res://addons/block_code/ui/blocks/statement_block/statement_block.gd", "res://addons/block_code/ui/blocks/statement_block/statement_block.tscn", "res://addons/block_code/ui/blocks/utilities/background/background.gd", "res://addons/block_code/ui/blocks/utilities/background/gutter.gd", "res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd", "res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn", "res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd", "res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn", "res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd", "res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn", "res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd", "res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn", "res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd", "res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn", "res://addons/block_code/ui/picker/picker.gd", "res://addons/block_code/ui/picker/picker.tscn", "res://addons/block_code/ui/picker/categories/block_category.gd", "res://addons/block_code/ui/picker/categories/block_category_button.gd", "res://addons/block_code/ui/picker/categories/block_category_button.tscn", "res://addons/block_code/ui/picker/categories/block_category_display.gd", "res://addons/block_code/ui/picker/categories/block_category_display.tscn", "res://addons/block_code/ui/picker/categories/category_factory.gd", "res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd", "res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn", "res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd", "res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn", "res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd", "res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn", "res://addons/block_code/ui/script_window/script_window.gd", "res://addons/block_code/ui/script_window/script_window.tscn", "res://addons/block_code/ui/title_bar/title_bar.gd", "res://addons/block_code/ui/title_bar/title_bar.tscn", "res://addons/block_code/ui/tooltip/tooltip.gd", "res://addons/block_code/ui/tooltip/tooltip.tscn") [rendering] From 6d149f03b88a57a9befae11c418a42ed5c39d251 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Wed, 30 Oct 2024 22:38:27 -0600 Subject: [PATCH 51/98] Add localization documentation A bit of info about working with the translations. --- addons/block_code/README.md | 64 +++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/addons/block_code/README.md b/addons/block_code/README.md index d349988f..5d328813 100644 --- a/addons/block_code/README.md +++ b/addons/block_code/README.md @@ -66,6 +66,70 @@ Lean into animations! Godot's animations functionality goes beyond just simple a Please share feedback in the [Godot Forum Block Coding thread](https://forum.godotengine.org/t/block-coding-high-level-block-based-visual-programming/68941). +## Localization + +The plugin supports translations through Godot's [gettext][godot-gettext] +support. We welcome contributions to make the plugin work better in your +language! However, please note that translations in the Godot editor **will +only work with Godot 4.4 or newer**. + +The gettext PO files are located in the `addons/block_code/locale` directory. +See the Godot [documentation][godot-gettext] for instructions on working with +PO files. + +[godot-gettext]: https://docs.godotengine.org/en/stable/tutorials/i18n/localization_using_gettext.html + +For developers, a few things need to be done to keep the translatable strings +up to date. + +* If files are added or removed, the list of translatable files needs to be + updated. This can be done by using the **Add** dialog in the [POT + Generation][pot-generation] tab. Or you can use the **Project → Tools → + Update BlockCode translated files** menu item in the editor. + +* If translatable strings have changed, the POT file needs to be updated. This + can be done by using the **Generate POT** dialog in the [POT + Generation][pot-generation] tab. Or you can use the **Project → Tools → + Regenerate BlockCode POT file** menu item in the editor. + +* If the POT file has changed, the PO message files need to be updated. This + can be done using the gettext `msgmerge` tool in the + `addons/block_code/locale` directory: + ``` + for po in *.po; do + msgmerge --update --backup=none "$po" godot_block_coding.pot + done + ``` + +[pot-generation]: https://docs.godotengine.org/en/stable/tutorials/i18n/localization_using_gettext.html#automatic-generation-using-the-editor + +Strings added in scene files or block definition resources will usually be +extracted for localization and translated in the editor automatically. Strings +in scripts need more consideration. + +* `Object`s or `Node`s that are not descendents of the Block Coding panel need + to have their translation domain set with the `set_block_translation_domain` + helper function. This should usually be done in the object's `_init` method + to make sure the translation domain is set before that object or any of its + descendents (which inherit the translation domain by default) try to use + localized strings. + +* Usually [`tr`][object-tr] and [`tr_n`][object-tr-n] (or [`atr`][node-atr] and + [`atr_n`][node-atr-n] for `Node`s) should be used to mark translatable + strings. These will eventually call the domain's + [`translate`][domain-translate] or + [`translate_plural`][domain-translate-plural] methods, but the `tr` methods + respect translation settings on the object instances. The only time the + `translate` methods should be called directly is within a static context when + an object instance isn't available. + +[object-tr]: https://docs.godotengine.org/en/stable/classes/class_object.html#class-object-method-tr +[object-tr-n]: https://docs.godotengine.org/en/stable/classes/class_object.html#class-object-method-tr-n +[node-atr]: https://docs.godotengine.org/en/stable/classes/class_node.html#class-node-method-atr +[node-atr-n]: https://docs.godotengine.org/en/stable/classes/class_node.html#class-node-method-atr-n +[domain-translate]: https://docs.godotengine.org/en/latest/classes/class_translationdomain.html#class-translationdomain-method-translate +[domain-translate-plural]: https://docs.godotengine.org/en/latest/classes/class_translationdomain.html#class-translationdomain-method-translate-plural + ## Development ### pre-commit From 4e59b31a35626070f0544f906a1d406e163ec067 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Qui=C3=B1ones?= Date: Mon, 4 Nov 2024 17:00:42 -0300 Subject: [PATCH 52/98] Switch property labels back to human readable In commit c18ab3f we regressed the property names from capitalized to lower case. We actually want both: capitalize them and then lower case them. Fixes https://github.com/endlessm/godot-block-coding/issues/302 --- addons/block_code/code_generation/blocks_catalog.gd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/block_code/code_generation/blocks_catalog.gd b/addons/block_code/code_generation/blocks_catalog.gd index 227b568f..e4ece40d 100644 --- a/addons/block_code/code_generation/blocks_catalog.gd +++ b/addons/block_code/code_generation/blocks_catalog.gd @@ -118,7 +118,7 @@ static func _add_property_definitions(_class_name: String, property_list: Array[ block_settings.category, Types.BlockType.STATEMENT, TYPE_NIL, - "set %s to {value: %s}" % [property.name.to_lower(), type_string], + "set %s to {value: %s}" % [property.name.capitalize().to_lower(), type_string], "%s = {value}" % property.name, {"value": block_settings.get("default_set", _FALLBACK_SET_FOR_TYPE[property.type])}, ) @@ -136,7 +136,7 @@ static func _add_property_definitions(_class_name: String, property_list: Array[ block_settings.category, Types.BlockType.STATEMENT, TYPE_NIL, - "change %s by {value: %s}" % [property.name.to_lower(), type_string], + "change %s by {value: %s}" % [property.name.capitalize().to_lower(), type_string], "%s += {value}" % property.name, {"value": block_settings.get("default_change", _FALLBACK_CHANGE_FOR_TYPE[property.type])}, ) @@ -153,7 +153,7 @@ static func _add_property_definitions(_class_name: String, property_list: Array[ block_settings.category, Types.BlockType.VALUE, property.type, - "%s" % property.name.to_lower(), + "%s" % property.name.capitalize().to_lower(), "%s" % property.name, ) ) From 91396be5c7f35f0e0457d73a19559d7645e3f4c6 Mon Sep 17 00:00:00 2001 From: Jian-Hong Pan Date: Wed, 30 Oct 2024 16:38:39 +0800 Subject: [PATCH 53/98] BlockCanvas: Introduce _drop_node Extract dropping nodes codes as function _drop_node from _drop_data, if the type is "nodes". So, other types such as "obj_property" can be added later. https://phabricator.endlessm.com/T35649 --- addons/block_code/ui/block_canvas/block_canvas.gd | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/addons/block_code/ui/block_canvas/block_canvas.gd b/addons/block_code/ui/block_canvas/block_canvas.gd index 7a083da6..2c4f37b8 100644 --- a/addons/block_code/ui/block_canvas/block_canvas.gd +++ b/addons/block_code/ui/block_canvas/block_canvas.gd @@ -92,6 +92,11 @@ func _can_drop_data(at_position: Vector2, data: Variant) -> bool: func _drop_data(at_position: Vector2, data: Variant) -> void: + if data["type"] == "nodes": + _drop_node(at_position, data) + + +func _drop_node(at_position: Vector2, data: Variant) -> void: var abs_path: NodePath = data.get("nodes", []).pop_back() if abs_path == null: return From 89beea94eefa26d47e5059f73a4804f771323fae Mon Sep 17 00:00:00 2001 From: Jian-Hong Pan Date: Wed, 30 Oct 2024 18:05:52 +0800 Subject: [PATCH 54/98] BlockCanvas: Implement drag & drop the node's property from Inspector Dragging the node's property from Inspector shows the object's type as "obj_property". So, allow the "obj_property" type in _can_drop_data() and handle it in _drop_data(). Then, implement getting the property's value as a Variable block with _drop_obj_property() in detail. https://phabricator.endlessm.com/T35649 --- .../ui/block_canvas/block_canvas.gd | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/addons/block_code/ui/block_canvas/block_canvas.gd b/addons/block_code/ui/block_canvas/block_canvas.gd index 2c4f37b8..ed72a727 100644 --- a/addons/block_code/ui/block_canvas/block_canvas.gd +++ b/addons/block_code/ui/block_canvas/block_canvas.gd @@ -4,9 +4,11 @@ extends MarginContainer const ASTList = preload("res://addons/block_code/code_generation/ast_list.gd") const BlockAST = preload("res://addons/block_code/code_generation/block_ast.gd") const BlockCodePlugin = preload("res://addons/block_code/block_code_plugin.gd") +const BlockDefinition = preload("res://addons/block_code/code_generation/block_definition.gd") const BlockTreeUtil = preload("res://addons/block_code/ui/block_tree_util.gd") const DragManager = preload("res://addons/block_code/drag_manager/drag_manager.gd") const ScriptGenerator = preload("res://addons/block_code/code_generation/script_generator.gd") +const Types = preload("res://addons/block_code/types/types.gd") const Util = preload("res://addons/block_code/ui/util.gd") const EXTEND_MARGIN: float = 800 @@ -75,6 +77,10 @@ func _can_drop_data(at_position: Vector2, data: Variant) -> bool: if typeof(data) != TYPE_DICTIONARY: return false + # Allow dropping property block + if data.get("type", "") == "obj_property": + return true + var nodes: Array = data.get("nodes", []) if nodes.size() != 1: return false @@ -94,6 +100,8 @@ func _can_drop_data(at_position: Vector2, data: Variant) -> bool: func _drop_data(at_position: Vector2, data: Variant) -> void: if data["type"] == "nodes": _drop_node(at_position, data) + elif data["type"] == "obj_property": + _drop_obj_property(at_position, data) func _drop_node(at_position: Vector2, data: Variant) -> void: @@ -113,6 +121,30 @@ func _drop_node(at_position: Vector2, data: Variant) -> void: reconnect_block.emit(block) +func _drop_obj_property(at_position: Vector2, data: Variant) -> void: + var object_name = str(data["object"]).get_slice(":", 0) + var property_name = data["property"] + var property_value = data["value"] + + # Prepare a block to get the property's value + var block_definition = ( + BlockDefinition + . new( + &"%s_get_%s" % [object_name, property_name], + object_name, + "The %s property" % property_name, + "Variables", + Types.BlockType.VALUE, + typeof(property_value), + "%s" % property_name.capitalize().to_lower(), + "%s" % property_name, + ) + ) + var block = _context.block_script.instantiate_block(block_definition) + add_block(block, at_position) + reconnect_block.emit(block) + + func add_block(block: Block, position: Vector2 = Vector2.ZERO) -> void: if block is EntryBlock: block.position = canvas_to_window(position).snapped(SNAP_GRID) From c6ef1c12c31b681cd191831fae7c7a2c402271e1 Mon Sep 17 00:00:00 2001 From: Jian-Hong Pan Date: Thu, 31 Oct 2024 14:39:46 +0800 Subject: [PATCH 55/98] BlockCanvas: Drag & drop the node's set property block from Inspector if CTRL is pressed Drag & drop the node's set property block from Inspector if the modifier key CTRL is pressed. To detect pressing CTRL key, hook the input event and set the _modifier_ctrl flag with the CTRL key's pressed state. If the _modifier_ctrl is true, then drop a set Variable block. Otherwise, it should be a get Variable block of the property. https://phabricator.endlessm.com/T35649 --- .../ui/block_canvas/block_canvas.gd | 55 ++++++++++++++----- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/addons/block_code/ui/block_canvas/block_canvas.gd b/addons/block_code/ui/block_canvas/block_canvas.gd index ed72a727..2f4fcc51 100644 --- a/addons/block_code/ui/block_canvas/block_canvas.gd +++ b/addons/block_code/ui/block_canvas/block_canvas.gd @@ -54,6 +54,8 @@ var zoom: float: get: return _window.scale.x +var _modifier_ctrl := false + signal reconnect_block(block: Block) signal add_block_code signal open_scene @@ -126,20 +128,41 @@ func _drop_obj_property(at_position: Vector2, data: Variant) -> void: var property_name = data["property"] var property_value = data["value"] - # Prepare a block to get the property's value - var block_definition = ( - BlockDefinition - . new( - &"%s_get_%s" % [object_name, property_name], - object_name, - "The %s property" % property_name, - "Variables", - Types.BlockType.VALUE, - typeof(property_value), - "%s" % property_name.capitalize().to_lower(), - "%s" % property_name, + # Prepare a Variable block to set / get the property's value according to + # the modifier KEY_CTRL pressing. + var block_definition: BlockDefinition + var property_type = typeof(property_value) + if _modifier_ctrl: + var type_string: String = Types.VARIANT_TYPE_TO_STRING[property_type] + block_definition = ( + BlockDefinition + . new( + &"%s_set_%s" % [object_name, property_name], + object_name, + "Set the %s property" % property_name, + "Variables", + Types.BlockType.STATEMENT, + property_type, + "set %s to {value: %s}" % [property_name.capitalize().to_lower(), type_string], + "%s = {value}" % property_name, + {"value": property_value}, + ) + ) + else: + block_definition = ( + BlockDefinition + . new( + &"%s_get_%s" % [object_name, property_name], + object_name, + "The %s property" % property_name, + "Variables", + Types.BlockType.VALUE, + property_type, + "%s" % property_name.capitalize().to_lower(), + "%s" % property_name, + ) ) - ) + var block = _context.block_script.instantiate_block(block_definition) add_block(block, at_position) reconnect_block.emit(block) @@ -410,6 +433,12 @@ func _on_replace_block_code_button_pressed(): replace_block_code.emit() +func _input(event): + if event is InputEventKey: + if event.keycode == KEY_CTRL: + _modifier_ctrl = event.pressed + + func _gui_input(event): if event is InputEventKey: if event.keycode == KEY_SHIFT: From 929806c7eb189c36cfb6c40d0ce12a6416fd0832 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Fri, 1 Nov 2024 20:27:25 -0600 Subject: [PATCH 56/98] Initial Transifex configuratoin This adds configuration for the tx client and a pointer to the project. Later we might make use of the full Transifex/GitHub integration[1]. 1. https://help.transifex.com/en/articles/6265125-github-installation-and-configuration https://phabricator.endlessm.com/T35709 --- .tx/config | 8 ++++++++ addons/block_code/README.md | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 .tx/config diff --git a/.tx/config b/.tx/config new file mode 100644 index 00000000..71af3289 --- /dev/null +++ b/.tx/config @@ -0,0 +1,8 @@ +[main] +host = https://www.transifex.com + +[o:endless-os:p:godot-block-coding:r:all] +source_file = addons/block_code/locale/godot_block_coding.pot +source_lang = en +file_filter = addons/block_code/locale/.po +type = PO diff --git a/addons/block_code/README.md b/addons/block_code/README.md index 5d328813..55a0e4d0 100644 --- a/addons/block_code/README.md +++ b/addons/block_code/README.md @@ -75,9 +75,11 @@ only work with Godot 4.4 or newer**. The gettext PO files are located in the `addons/block_code/locale` directory. See the Godot [documentation][godot-gettext] for instructions on working with -PO files. +PO files. You can also join our project on [Transifex][transifex-project] to +collaborate with others translating the Block Coding content. [godot-gettext]: https://docs.godotengine.org/en/stable/tutorials/i18n/localization_using_gettext.html +[transifex-project]: https://explore.transifex.com/endless-os/godot-block-coding/ For developers, a few things need to be done to keep the translatable strings up to date. From ee073039fd43b7bd14769ce4cd0e1a24dc1a34fb Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Tue, 5 Nov 2024 09:48:16 -0700 Subject: [PATCH 57/98] Skip pre-commit checks for locale files The locale POT and PO files are primarily generated and shouldn't be subject to pre-commit checks. --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f5954e68..283c650a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -15,4 +15,4 @@ repos: hooks: - id: gdformat args: [--line-length=200] -files: ^(addons/block_code/(?!lib/).*|tests/.*)$ +files: ^(addons/block_code/(?!lib/|locale/).*|tests/.*)$ From 54b4074184eb8ca414e0e86dabca68a9e8a46ddc Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Tue, 5 Nov 2024 09:40:39 -0700 Subject: [PATCH 58/98] Sync translations from Transifex Pull in all the translations from Transifex using `tx pull -f`. This adds a bunch more message catalogs for languages that were configured in Transifex. As noted in 0c044ac, country specific locales were left out for now to avoid a Godot bug choosing the best locale. https://phabricator.endlessm.com/T35709 --- addons/block_code/locale/ar.po | 29 +- addons/block_code/locale/az.po | 857 ++++++++++++++++++++++++++++++ addons/block_code/locale/bn.po | 29 +- addons/block_code/locale/ca.po | 29 +- addons/block_code/locale/cs.po | 30 +- addons/block_code/locale/de.po | 28 +- addons/block_code/locale/el.po | 28 +- addons/block_code/locale/eo.po | 28 +- addons/block_code/locale/es.po | 64 +-- addons/block_code/locale/et.po | 28 +- addons/block_code/locale/fr.po | 30 +- addons/block_code/locale/he.po | 30 +- addons/block_code/locale/hi.po | 857 ++++++++++++++++++++++++++++++ addons/block_code/locale/hu.po | 28 +- addons/block_code/locale/id.po | 29 +- addons/block_code/locale/it.po | 30 +- addons/block_code/locale/ja.po | 28 +- addons/block_code/locale/lt.po | 857 ++++++++++++++++++++++++++++++ addons/block_code/locale/lv.po | 31 +- addons/block_code/locale/mr.po | 857 ++++++++++++++++++++++++++++++ addons/block_code/locale/ms.po | 29 +- addons/block_code/locale/nb.po | 28 +- addons/block_code/locale/nl.po | 28 +- addons/block_code/locale/pl.po | 31 +- addons/block_code/locale/pt.po | 30 +- addons/block_code/locale/ro.po | 31 +- addons/block_code/locale/ru.po | 31 +- addons/block_code/locale/si.po | 857 ++++++++++++++++++++++++++++++ addons/block_code/locale/sl.po | 857 ++++++++++++++++++++++++++++++ addons/block_code/locale/sq.po | 857 ++++++++++++++++++++++++++++++ addons/block_code/locale/sw.po | 857 ++++++++++++++++++++++++++++++ addons/block_code/locale/ta.po | 857 ++++++++++++++++++++++++++++++ addons/block_code/locale/tr.po | 30 +- addons/block_code/locale/vi.po | 28 +- addons/block_code/locale/zh_CN.po | 29 +- addons/block_code/locale/zh_TW.po | 29 +- project.godot | 2 +- 37 files changed, 8129 insertions(+), 409 deletions(-) create mode 100644 addons/block_code/locale/az.po create mode 100644 addons/block_code/locale/hi.po create mode 100644 addons/block_code/locale/lt.po create mode 100644 addons/block_code/locale/mr.po create mode 100644 addons/block_code/locale/si.po create mode 100644 addons/block_code/locale/sl.po create mode 100644 addons/block_code/locale/sq.po create mode 100644 addons/block_code/locale/sw.po create mode 100644 addons/block_code/locale/ta.po diff --git a/addons/block_code/locale/ar.po b/addons/block_code/locale/ar.po index db89300c..7d7df79e 100644 --- a/addons/block_code/locale/ar.po +++ b/addons/block_code/locale/ar.po @@ -155,18 +155,19 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: ar\n" +"Language-Team: Arabic (https://app.transifex.com/endless-os/teams/9016/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" #: addons/block_code/block_code_plugin.gd msgid "Regenerate %s POT file" @@ -380,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -765,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -799,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/az.po b/addons/block_code/locale/az.po new file mode 100644 index 00000000..5ed2313c --- /dev/null +++ b/addons/block_code/locale/az.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Language-Team: Azerbaijani (https://app.transifex.com/endless-os/teams/9016/az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/bn.po b/addons/block_code/locale/bn.po index 9a299639..7e5c9578 100644 --- a/addons/block_code/locale/bn.po +++ b/addons/block_code/locale/bn.po @@ -155,18 +155,19 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: bn\n" +"Language-Team: Bengali (https://app.transifex.com/endless-os/teams/9016/bn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #: addons/block_code/block_code_plugin.gd msgid "Regenerate %s POT file" @@ -380,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -765,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -799,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/ca.po b/addons/block_code/locale/ca.po index c45e94e2..8488d036 100644 --- a/addons/block_code/locale/ca.po +++ b/addons/block_code/locale/ca.po @@ -155,18 +155,19 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: ca\n" +"Language-Team: Catalan (https://app.transifex.com/endless-os/teams/9016/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #: addons/block_code/block_code_plugin.gd msgid "Regenerate %s POT file" @@ -380,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -765,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -799,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/cs.po b/addons/block_code/locale/cs.po index 06c0cc72..0d85df1f 100644 --- a/addons/block_code/locale/cs.po +++ b/addons/block_code/locale/cs.po @@ -155,19 +155,19 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: cs\n" +"Language-Team: Czech (https://app.transifex.com/endless-os/teams/9016/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" #: addons/block_code/block_code_plugin.gd msgid "Regenerate %s POT file" @@ -381,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -766,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -800,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/de.po b/addons/block_code/locale/de.po index 396ffee2..d38a8c3d 100644 --- a/addons/block_code/locale/de.po +++ b/addons/block_code/locale/de.po @@ -155,18 +155,18 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: de\n" +"Language-Team: German (https://app.transifex.com/endless-os/teams/9016/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: addons/block_code/block_code_plugin.gd @@ -381,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -766,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -800,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/el.po b/addons/block_code/locale/el.po index eb3396ce..1237655a 100644 --- a/addons/block_code/locale/el.po +++ b/addons/block_code/locale/el.po @@ -155,18 +155,18 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: el\n" +"Language-Team: Greek (https://app.transifex.com/endless-os/teams/9016/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: addons/block_code/block_code_plugin.gd @@ -381,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -766,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -800,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/eo.po b/addons/block_code/locale/eo.po index 41b1e006..f2170514 100644 --- a/addons/block_code/locale/eo.po +++ b/addons/block_code/locale/eo.po @@ -155,18 +155,18 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: eo\n" +"Language-Team: Esperanto (https://app.transifex.com/endless-os/teams/9016/eo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: eo\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: addons/block_code/block_code_plugin.gd @@ -381,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -766,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -800,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/es.po b/addons/block_code/locale/es.po index 22609bb1..84224305 100644 --- a/addons/block_code/locale/es.po +++ b/addons/block_code/locale/es.po @@ -155,19 +155,23 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +# Translators: +# Manuel Quiñones, 2024 +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: es\n" +"Last-Translator: Manuel Quiñones, 2024\n" +"Language-Team: Spanish (https://app.transifex.com/endless-os/teams/9016/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: es\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: addons/block_code/block_code_plugin.gd msgid "Regenerate %s POT file" @@ -184,23 +188,23 @@ msgstr "" #: addons/block_code/blocks/communication/remove_from_group.tres #: addons/block_code/blocks/communication/remove_node_from_group.tres msgid "Communication | Groups" -msgstr "" +msgstr "Comunicación | Grupos" #: addons/block_code/blocks/communication/add_node_to_group.tres msgid "Add the node into the group" -msgstr "" +msgstr "Agrega el nodo al grupo" #: addons/block_code/blocks/communication/add_node_to_group.tres msgid "add {node: OBJECT} to group {group: STRING}" -msgstr "" +msgstr "agregar {node: OBJECT} al grupo {group: STRING}" #: addons/block_code/blocks/communication/add_to_group.tres msgid "Add this node into the group" -msgstr "" +msgstr "Agrega este nodo al grupo" #: addons/block_code/blocks/communication/add_to_group.tres msgid "add to group {group: STRING}" -msgstr "" +msgstr "agregar al grupo {group: STRING}" #: addons/block_code/blocks/communication/area2d_on_entered.tres #: addons/block_code/blocks/communication/area2d_on_exited.tres @@ -210,45 +214,45 @@ msgstr "" #: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres #: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres msgid "Communication | Methods" -msgstr "" +msgstr "Comunicación | Métodos" #: addons/block_code/blocks/communication/area2d_on_entered.tres #: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres msgid "when this node collides with [something: OBJECT]" -msgstr "" +msgstr "cuando este nodo colisiona con [something: OBJECT]" #: addons/block_code/blocks/communication/area2d_on_exited.tres #: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres msgid "when this node stops colliding with [something: OBJECT]" -msgstr "" +msgstr "cuando este nodo deja de colisionar con [something: OBJECT]" #: addons/block_code/blocks/communication/call_method_group.tres msgid "Calls the method/function on each member of the given group" -msgstr "" +msgstr "Llama al método/función en cada miembro del grupo dado" #: addons/block_code/blocks/communication/call_method_group.tres msgid "call method {method_name: STRING} in group {group: STRING}" -msgstr "" +msgstr "llamar al método {method_name: STRING} en el grupo {group: STRING}" #: addons/block_code/blocks/communication/call_method_node.tres msgid "Calls the method/function of the given node" -msgstr "" +msgstr "Llama al método/función en el nodo dado" #: addons/block_code/blocks/communication/call_method_node.tres msgid "call method {method_name: STRING} on node {node: OBJECT}" -msgstr "" +msgstr "llamar al método {method_name: STRING} en el nodo {node: OBJECT}" #: addons/block_code/blocks/communication/define_method.tres msgid "Define a method/function with following statements" -msgstr "" +msgstr "Define un método/función con las declaraciones siguientes" #: addons/block_code/blocks/communication/define_method.tres msgid "define method {method_name: STRING_NAME}" -msgstr "" +msgstr "definir al método {method_name: STRING_NAME}" #: addons/block_code/blocks/communication/get_node.tres msgid "Communication | Nodes" -msgstr "" +msgstr "Comunicación | Nodos" #: addons/block_code/blocks/communication/get_node.tres msgid "Get the node at the given path" @@ -381,14 +385,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -766,8 +770,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -800,7 +803,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/et.po b/addons/block_code/locale/et.po index 6bc01711..4a01c3dc 100644 --- a/addons/block_code/locale/et.po +++ b/addons/block_code/locale/et.po @@ -155,18 +155,18 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: et\n" +"Language-Team: Estonian (https://app.transifex.com/endless-os/teams/9016/et/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: et\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: addons/block_code/block_code_plugin.gd @@ -381,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -766,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -800,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/fr.po b/addons/block_code/locale/fr.po index 28f2bed4..afa01524 100644 --- a/addons/block_code/locale/fr.po +++ b/addons/block_code/locale/fr.po @@ -155,19 +155,19 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: fr\n" +"Language-Team: French (https://app.transifex.com/endless-os/teams/9016/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: addons/block_code/block_code_plugin.gd msgid "Regenerate %s POT file" @@ -381,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -766,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -800,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/he.po b/addons/block_code/locale/he.po index 98bb5e2a..dd9dad5c 100644 --- a/addons/block_code/locale/he.po +++ b/addons/block_code/locale/he.po @@ -155,19 +155,19 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: he\n" +"Language-Team: Hebrew (https://app.transifex.com/endless-os/teams/9016/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: he\n" +"Plural-Forms: nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;\n" #: addons/block_code/block_code_plugin.gd msgid "Regenerate %s POT file" @@ -381,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -766,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -800,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/hi.po b/addons/block_code/locale/hi.po new file mode 100644 index 00000000..2aec7e27 --- /dev/null +++ b/addons/block_code/locale/hi.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Language-Team: Hindi (https://app.transifex.com/endless-os/teams/9016/hi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/hu.po b/addons/block_code/locale/hu.po index 44cc3c74..6ac5c98a 100644 --- a/addons/block_code/locale/hu.po +++ b/addons/block_code/locale/hu.po @@ -155,18 +155,18 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: hu\n" +"Language-Team: Hungarian (https://app.transifex.com/endless-os/teams/9016/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: addons/block_code/block_code_plugin.gd @@ -381,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -766,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -800,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/id.po b/addons/block_code/locale/id.po index 01b39691..45c598a1 100644 --- a/addons/block_code/locale/id.po +++ b/addons/block_code/locale/id.po @@ -155,18 +155,19 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: id\n" +"Language-Team: Indonesian (https://app.transifex.com/endless-os/teams/9016/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" #: addons/block_code/block_code_plugin.gd msgid "Regenerate %s POT file" @@ -380,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -765,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -799,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/it.po b/addons/block_code/locale/it.po index b73ae84a..b46b27aa 100644 --- a/addons/block_code/locale/it.po +++ b/addons/block_code/locale/it.po @@ -155,19 +155,19 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: it\n" +"Language-Team: Italian (https://app.transifex.com/endless-os/teams/9016/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: it\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: addons/block_code/block_code_plugin.gd msgid "Regenerate %s POT file" @@ -381,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -766,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -800,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/ja.po b/addons/block_code/locale/ja.po index 29edb013..c79d4ad6 100644 --- a/addons/block_code/locale/ja.po +++ b/addons/block_code/locale/ja.po @@ -155,18 +155,18 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: ja\n" +"Language-Team: Japanese (https://app.transifex.com/endless-os/teams/9016/ja/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" #: addons/block_code/block_code_plugin.gd @@ -381,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -766,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -800,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/lt.po b/addons/block_code/locale/lt.po new file mode 100644 index 00000000..98262801 --- /dev/null +++ b/addons/block_code/locale/lt.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Language-Team: Lithuanian (https://app.transifex.com/endless-os/teams/9016/lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/lv.po b/addons/block_code/locale/lv.po index d99750d4..a354e9e8 100644 --- a/addons/block_code/locale/lv.po +++ b/addons/block_code/locale/lv.po @@ -155,20 +155,19 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: lv\n" +"Language-Team: Latvian (https://app.transifex.com/endless-os/teams/9016/lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " -"2);\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" #: addons/block_code/block_code_plugin.gd msgid "Regenerate %s POT file" @@ -382,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -767,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -801,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/mr.po b/addons/block_code/locale/mr.po new file mode 100644 index 00000000..2adfa622 --- /dev/null +++ b/addons/block_code/locale/mr.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Language-Team: Marathi (https://app.transifex.com/endless-os/teams/9016/mr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/ms.po b/addons/block_code/locale/ms.po index 5b4445eb..c5ea255f 100644 --- a/addons/block_code/locale/ms.po +++ b/addons/block_code/locale/ms.po @@ -155,18 +155,19 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: ms\n" +"Language-Team: Malay (https://app.transifex.com/endless-os/teams/9016/ms/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: ms\n" +"Plural-Forms: nplurals=1; plural=0;\n" #: addons/block_code/block_code_plugin.gd msgid "Regenerate %s POT file" @@ -380,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -765,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -799,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/nb.po b/addons/block_code/locale/nb.po index 68a34ebd..0d7d7de1 100644 --- a/addons/block_code/locale/nb.po +++ b/addons/block_code/locale/nb.po @@ -155,18 +155,18 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: nb\n" +"Language-Team: Norwegian Bokmål (https://app.transifex.com/endless-os/teams/9016/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: nb\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: addons/block_code/block_code_plugin.gd @@ -381,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -766,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -800,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/nl.po b/addons/block_code/locale/nl.po index 141b8ceb..4a86de5e 100644 --- a/addons/block_code/locale/nl.po +++ b/addons/block_code/locale/nl.po @@ -155,18 +155,18 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: nl\n" +"Language-Team: Dutch (https://app.transifex.com/endless-os/teams/9016/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: addons/block_code/block_code_plugin.gd @@ -381,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -766,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -800,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/pl.po b/addons/block_code/locale/pl.po index 7f3f6ebb..61e7281a 100644 --- a/addons/block_code/locale/pl.po +++ b/addons/block_code/locale/pl.po @@ -155,20 +155,19 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: pl\n" +"Language-Team: Polish (https://app.transifex.com/endless-os/teams/9016/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #: addons/block_code/block_code_plugin.gd msgid "Regenerate %s POT file" @@ -382,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -767,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -801,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/pt.po b/addons/block_code/locale/pt.po index f7e0c27b..7c3d0824 100644 --- a/addons/block_code/locale/pt.po +++ b/addons/block_code/locale/pt.po @@ -155,19 +155,19 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: pt\n" +"Language-Team: Portuguese (https://app.transifex.com/endless-os/teams/9016/pt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: addons/block_code/block_code_plugin.gd msgid "Regenerate %s POT file" @@ -381,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -766,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -800,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/ro.po b/addons/block_code/locale/ro.po index 40aa27f0..87d0d940 100644 --- a/addons/block_code/locale/ro.po +++ b/addons/block_code/locale/ro.po @@ -155,20 +155,19 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: ro\n" +"Language-Team: Romanian (https://app.transifex.com/endless-os/teams/9016/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " -"20)) ? 1 : 2;\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" #: addons/block_code/block_code_plugin.gd msgid "Regenerate %s POT file" @@ -382,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -767,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -801,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/ru.po b/addons/block_code/locale/ru.po index 566395ee..628fdce5 100644 --- a/addons/block_code/locale/ru.po +++ b/addons/block_code/locale/ru.po @@ -155,20 +155,19 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: ru\n" +"Language-Team: Russian (https://app.transifex.com/endless-os/teams/9016/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" #: addons/block_code/block_code_plugin.gd msgid "Regenerate %s POT file" @@ -382,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -767,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -801,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/si.po b/addons/block_code/locale/si.po new file mode 100644 index 00000000..5b58b8f9 --- /dev/null +++ b/addons/block_code/locale/si.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Language-Team: Sinhala (https://app.transifex.com/endless-os/teams/9016/si/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: si\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/sl.po b/addons/block_code/locale/sl.po new file mode 100644 index 00000000..699c17e3 --- /dev/null +++ b/addons/block_code/locale/sl.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Language-Team: Slovenian (https://app.transifex.com/endless-os/teams/9016/sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/sq.po b/addons/block_code/locale/sq.po new file mode 100644 index 00000000..cbd54e56 --- /dev/null +++ b/addons/block_code/locale/sq.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Language-Team: Albanian (https://app.transifex.com/endless-os/teams/9016/sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/sw.po b/addons/block_code/locale/sw.po new file mode 100644 index 00000000..23addd5b --- /dev/null +++ b/addons/block_code/locale/sw.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Language-Team: Swahili (https://app.transifex.com/endless-os/teams/9016/sw/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: sw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/ta.po b/addons/block_code/locale/ta.po new file mode 100644 index 00000000..7708f74b --- /dev/null +++ b/addons/block_code/locale/ta.po @@ -0,0 +1,857 @@ +# LANGUAGE translation for Block Coding Plugin for the following files: +# res://addons/block_code/block_code_plugin.gd +# res://addons/block_code/block_code_node/block_code.gd +# res://addons/block_code/blocks/communication/add_node_to_group.tres +# res://addons/block_code/blocks/communication/add_to_group.tres +# res://addons/block_code/blocks/communication/area2d_on_entered.tres +# res://addons/block_code/blocks/communication/area2d_on_exited.tres +# res://addons/block_code/blocks/communication/call_method_group.tres +# res://addons/block_code/blocks/communication/call_method_node.tres +# res://addons/block_code/blocks/communication/define_method.tres +# res://addons/block_code/blocks/communication/get_node.gd +# res://addons/block_code/blocks/communication/get_node.tres +# res://addons/block_code/blocks/communication/groups.gd +# res://addons/block_code/blocks/communication/is_in_group.tres +# res://addons/block_code/blocks/communication/is_node_in_group.tres +# res://addons/block_code/blocks/communication/remove_from_group.tres +# res://addons/block_code/blocks/communication/remove_node_from_group.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +# res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +# res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres +# res://addons/block_code/blocks/graphics/animationplayer_pause.tres +# res://addons/block_code/blocks/graphics/animationplayer_play.gd +# res://addons/block_code/blocks/graphics/animationplayer_play.tres +# res://addons/block_code/blocks/graphics/animationplayer_stop.tres +# res://addons/block_code/blocks/graphics/viewport_center.tres +# res://addons/block_code/blocks/graphics/viewport_height.tres +# res://addons/block_code/blocks/graphics/viewport_width.tres +# res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +# res://addons/block_code/blocks/input/characterbody2d_move.tres +# res://addons/block_code/blocks/input/is_input_actioned.gd +# res://addons/block_code/blocks/input/is_input_actioned.tres +# res://addons/block_code/blocks/lifecycle/process.tres +# res://addons/block_code/blocks/lifecycle/queue_free.tres +# res://addons/block_code/blocks/lifecycle/queue_free_node.tres +# res://addons/block_code/blocks/lifecycle/ready.tres +# res://addons/block_code/blocks/log/breakpoint.tres +# res://addons/block_code/blocks/log/concat.tres +# res://addons/block_code/blocks/log/print.tres +# res://addons/block_code/blocks/logic/and.tres +# res://addons/block_code/blocks/logic/compare.tres +# res://addons/block_code/blocks/logic/else.tres +# res://addons/block_code/blocks/logic/else_if.tres +# res://addons/block_code/blocks/logic/if.tres +# res://addons/block_code/blocks/logic/not.tres +# res://addons/block_code/blocks/logic/or.tres +# res://addons/block_code/blocks/loops/await_scene_ready.tres +# res://addons/block_code/blocks/loops/break.tres +# res://addons/block_code/blocks/loops/continue.tres +# res://addons/block_code/blocks/loops/for.tres +# res://addons/block_code/blocks/loops/while.tres +# res://addons/block_code/blocks/math/add.tres +# res://addons/block_code/blocks/math/cos.tres +# res://addons/block_code/blocks/math/divide.tres +# res://addons/block_code/blocks/math/multiply.tres +# res://addons/block_code/blocks/math/pow.tres +# res://addons/block_code/blocks/math/randf_range.tres +# res://addons/block_code/blocks/math/randi_range.tres +# res://addons/block_code/blocks/math/sin.tres +# res://addons/block_code/blocks/math/subtract.tres +# res://addons/block_code/blocks/math/tan.tres +# res://addons/block_code/blocks/math/vector2_x.tres +# res://addons/block_code/blocks/math/vector2_y.tres +# res://addons/block_code/blocks/math/vector_from_angle.tres +# res://addons/block_code/blocks/math/vector_multiply.tres +# res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres +# res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +# res://addons/block_code/blocks/sounds/load_sound.tres +# res://addons/block_code/blocks/sounds/pause_continue_sound.tres +# res://addons/block_code/blocks/sounds/play_sound.tres +# res://addons/block_code/blocks/sounds/stop_sound.tres +# res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +# res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +# res://addons/block_code/blocks/ui/label_set_text.tres +# res://addons/block_code/blocks/variables/vector2.tres +# res://addons/block_code/code_generation/ast_list.gd +# res://addons/block_code/code_generation/block_ast.gd +# res://addons/block_code/code_generation/block_definition.gd +# res://addons/block_code/code_generation/block_extension.gd +# res://addons/block_code/code_generation/blocks_catalog.gd +# res://addons/block_code/code_generation/option_data.gd +# res://addons/block_code/code_generation/script_generator.gd +# res://addons/block_code/code_generation/util.gd +# res://addons/block_code/code_generation/variable_definition.gd +# res://addons/block_code/drag_manager/drag.gd +# res://addons/block_code/drag_manager/drag_manager.gd +# res://addons/block_code/drag_manager/drag_manager.tscn +# res://addons/block_code/examples/pong_game/ball.tscn +# res://addons/block_code/examples/pong_game/goal_area.tscn +# res://addons/block_code/examples/pong_game/player_score.tscn +# res://addons/block_code/examples/pong_game/pong_game.tscn +# res://addons/block_code/examples/pong_game/space.tscn +# res://addons/block_code/examples/spawner/ball.tscn +# res://addons/block_code/examples/spawner/spawner.tscn +# res://addons/block_code/examples/spawner/volatile_ball.tscn +# res://addons/block_code/inspector_plugin/block_script_inspector.gd +# res://addons/block_code/serialization/block_script_serialization.gd +# res://addons/block_code/serialization/block_serialization.gd +# res://addons/block_code/serialization/block_serialization_tree.gd +# res://addons/block_code/serialization/default_block_script.tres +# res://addons/block_code/serialization/value_block_serialization.gd +# res://addons/block_code/simple_nodes/simple_character/simple_character.gd +# res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd +# res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +# res://addons/block_code/simple_spawner/simple_spawner.gd +# res://addons/block_code/translation/parser.gd +# res://addons/block_code/translation/utils.gd +# res://addons/block_code/types/types.gd +# res://addons/block_code/ui/block_editor_context.gd +# res://addons/block_code/ui/block_tree_util.gd +# res://addons/block_code/ui/constants.gd +# res://addons/block_code/ui/main_panel.gd +# res://addons/block_code/ui/main_panel.tscn +# res://addons/block_code/ui/util.gd +# res://addons/block_code/ui/block_canvas/block_canvas.gd +# res://addons/block_code/ui/block_canvas/block_canvas.tscn +# res://addons/block_code/ui/blocks/block/block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.gd +# res://addons/block_code/ui/blocks/control_block/control_block.tscn +# res://addons/block_code/ui/blocks/entry_block/entry_block.gd +# res://addons/block_code/ui/blocks/entry_block/entry_block.tscn +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd +# res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn +# res://addons/block_code/ui/blocks/statement_block/statement_block.gd +# res://addons/block_code/ui/blocks/statement_block/statement_block.tscn +# res://addons/block_code/ui/blocks/utilities/background/background.gd +# res://addons/block_code/ui/blocks/utilities/background/gutter.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd +# res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd +# res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd +# res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +# res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +# res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn +# res://addons/block_code/ui/picker/picker.gd +# res://addons/block_code/ui/picker/picker.tscn +# res://addons/block_code/ui/picker/categories/block_category.gd +# res://addons/block_code/ui/picker/categories/block_category_button.gd +# res://addons/block_code/ui/picker/categories/block_category_button.tscn +# res://addons/block_code/ui/picker/categories/block_category_display.gd +# res://addons/block_code/ui/picker/categories/block_category_display.tscn +# res://addons/block_code/ui/picker/categories/category_factory.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +# res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd +# res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn +# res://addons/block_code/ui/script_window/script_window.gd +# res://addons/block_code/ui/script_window/script_window.tscn +# res://addons/block_code/ui/title_bar/title_bar.gd +# res://addons/block_code/ui/title_bar/title_bar.tscn +# res://addons/block_code/ui/tooltip/tooltip.gd +# res://addons/block_code/ui/tooltip/tooltip.tscn +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Block Coding Plugin\n" +"Language-Team: Tamil (https://app.transifex.com/endless-os/teams/9016/ta/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: addons/block_code/block_code_plugin.gd +msgid "Regenerate %s POT file" +msgstr "" + +#: addons/block_code/block_code_plugin.gd +msgid "Update %s translated files" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +#: addons/block_code/blocks/communication/add_to_group.tres +#: addons/block_code/blocks/communication/is_in_group.tres +#: addons/block_code/blocks/communication/is_node_in_group.tres +#: addons/block_code/blocks/communication/remove_from_group.tres +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Communication | Groups" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "Add the node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_node_to_group.tres +msgid "add {node: OBJECT} to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "Add this node into the group" +msgstr "" + +#: addons/block_code/blocks/communication/add_to_group.tres +msgid "add to group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/call_method_group.tres +#: addons/block_code/blocks/communication/call_method_node.tres +#: addons/block_code/blocks/communication/define_method.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "Communication | Methods" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_entered.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres +msgid "when this node collides with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/area2d_on_exited.tres +#: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres +msgid "when this node stops colliding with [something: OBJECT]" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "Calls the method/function on each member of the given group" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_group.tres +msgid "call method {method_name: STRING} in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "Calls the method/function of the given node" +msgstr "" + +#: addons/block_code/blocks/communication/call_method_node.tres +msgid "call method {method_name: STRING} on node {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "Define a method/function with following statements" +msgstr "" + +#: addons/block_code/blocks/communication/define_method.tres +msgid "define method {method_name: STRING_NAME}" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Communication | Nodes" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "Get the node at the given path" +msgstr "" + +#: addons/block_code/blocks/communication/get_node.tres +msgid "{path: NIL}" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "Is this node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_in_group.tres +msgid "is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "Is the node in the group" +msgstr "" + +#: addons/block_code/blocks/communication/is_node_in_group.tres +msgid "{node: OBJECT} is in group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "Remove this node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_from_group.tres +msgid "remove from group {group: STRING}" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "Remove the node from the group" +msgstr "" + +#: addons/block_code/blocks/communication/remove_node_from_group.tres +msgid "remove {node: OBJECT} from group {group: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +#: addons/block_code/blocks/graphics/animationplayer_play.tres +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Graphics | Animation" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "Check if an animation is currently playing." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_is_playing.tres +msgid "is playing" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "Pause the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_pause.tres +msgid "pause" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "Play the animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_play.tres +msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +msgid "Stop the currently playing animation." +msgstr "" + +#: addons/block_code/blocks/graphics/animationplayer_stop.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +msgid "stop" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +#: addons/block_code/blocks/graphics/viewport_height.tres +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "Graphics | Viewport" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "Coordinates of the middle of the viewable screen when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_center.tres +msgid "viewport center" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "How tall the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_height.tres +msgid "viewport height" +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "How wide the viewable screen is when playing." +msgstr "" + +#: addons/block_code/blocks/graphics/viewport_width.tres +msgid "viewport width" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "Physics | Velocity" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "True if the character is on the floor." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres +msgid "is on floor" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "Input" +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"Move the character up, down, left, and right with the keyboard using the " +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." +msgstr "" + +#: addons/block_code/blocks/input/characterbody2d_move.tres +msgid "" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "True if the specified input action has been pressed or released." +msgstr "" + +#: addons/block_code/blocks/input/is_input_actioned.tres +msgid "action {action_name: STRING_NAME} is {action: NIL}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +#: addons/block_code/blocks/lifecycle/queue_free.tres +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Lifecycle" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "" +"Attached blocks will be executed during the processing step of the main loop" +msgstr "" + +#: addons/block_code/blocks/lifecycle/process.tres +msgid "every frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "Queues this node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free.tres +msgid "remove" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "Queues the given node to be deleted at the end of the current frame" +msgstr "" + +#: addons/block_code/blocks/lifecycle/queue_free_node.tres +msgid "remove {node: OBJECT}" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "Attached blocks will be executed once when the node is \"ready\"" +msgstr "" + +#: addons/block_code/blocks/lifecycle/ready.tres +msgid "when starting" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +#: addons/block_code/blocks/log/concat.tres +#: addons/block_code/blocks/log/print.tres +msgid "Log" +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "Pause execution and show the current line of code in the debugger." +msgstr "" + +#: addons/block_code/blocks/log/breakpoint.tres +msgid "breakpoint" +msgstr "" + +#: addons/block_code/blocks/log/concat.tres +msgid "{string1: STRING} + {string2: STRING}" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "Print the text to output" +msgstr "" + +#: addons/block_code/blocks/log/print.tres +msgid "log text {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +#: addons/block_code/blocks/logic/not.tres +#: addons/block_code/blocks/logic/or.tres +msgid "Logic | Boolean" +msgstr "" + +#: addons/block_code/blocks/logic/and.tres +msgid "{bool1: BOOL} and {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "Logic | Comparison" +msgstr "" + +#: addons/block_code/blocks/logic/compare.tres +msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +#: addons/block_code/blocks/logic/else_if.tres +#: addons/block_code/blocks/logic/if.tres +msgid "Logic | Conditionals" +msgstr "" + +#: addons/block_code/blocks/logic/else.tres +msgid "else" +msgstr "" + +#: addons/block_code/blocks/logic/else_if.tres +msgid "else if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/if.tres +msgid "if {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/not.tres +msgid "not {bool: BOOL}" +msgstr "" + +#: addons/block_code/blocks/logic/or.tres +msgid "{bool1: BOOL} or {bool2: BOOL}" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +#: addons/block_code/blocks/loops/break.tres +#: addons/block_code/blocks/loops/continue.tres +#: addons/block_code/blocks/loops/for.tres +#: addons/block_code/blocks/loops/while.tres +msgid "Loops" +msgstr "" + +#: addons/block_code/blocks/loops/await_scene_ready.tres +msgid "wait for the scene to be ready" +msgstr "" + +#: addons/block_code/blocks/loops/break.tres +msgid "break" +msgstr "" + +#: addons/block_code/blocks/loops/continue.tres +msgid "continue" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "Run the connected blocks [i]number[/i] times" +msgstr "" + +#: addons/block_code/blocks/loops/for.tres +msgid "repeat {number: INT}" +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "" +"Run the connected blocks as long as [i]condition[/i] is true.\n" +"\n" +"Hint: snap a [b]Comparison[/b] block into the condition." +msgstr "" + +#: addons/block_code/blocks/loops/while.tres +msgid "while {condition: BOOL}" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +#: addons/block_code/blocks/math/cos.tres +#: addons/block_code/blocks/math/divide.tres +#: addons/block_code/blocks/math/multiply.tres +#: addons/block_code/blocks/math/pow.tres +#: addons/block_code/blocks/math/randf_range.tres +#: addons/block_code/blocks/math/randi_range.tres +#: addons/block_code/blocks/math/sin.tres +#: addons/block_code/blocks/math/subtract.tres +#: addons/block_code/blocks/math/tan.tres +#: addons/block_code/blocks/math/vector2_x.tres +#: addons/block_code/blocks/math/vector2_y.tres +#: addons/block_code/blocks/math/vector_from_angle.tres +#: addons/block_code/blocks/math/vector_multiply.tres +#: addons/block_code/blocks/variables/vector2.tres +msgid "Math" +msgstr "" + +#: addons/block_code/blocks/math/add.tres +msgid "{a: FLOAT} + {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "Calculate the cosine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/cos.tres +msgid "cos {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/divide.tres +msgid "{a: FLOAT} / {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/multiply.tres +msgid "{a: FLOAT} * {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/pow.tres +msgid "{base: FLOAT} ^ {exp: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "" +"Generate a random floating point number between [i]from[/i] and [i]to[/i] " +"inclusively" +msgstr "" + +#: addons/block_code/blocks/math/randf_range.tres +msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "" +"Generate a random signed 32-bits integer number between [i]from[/i] and " +"[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " +"positive number" +msgstr "" + +#: addons/block_code/blocks/math/randi_range.tres +msgid "random integer number between {from: INT} and {to: INT}" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "Calculate the sine of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/sin.tres +msgid "sin {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/subtract.tres +msgid "{a: FLOAT} - {b: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "Calculate the tangent of [i]angle[/i]" +msgstr "" + +#: addons/block_code/blocks/math/tan.tres +msgid "tan {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "Gives the x of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_x.tres +msgid "x of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "Gives the y of a [i]Vector2[/i]" +msgstr "" + +#: addons/block_code/blocks/math/vector2_y.tres +msgid "y of {vector2: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "Creates a unit Vector2 rotated to the given angle in radians." +msgstr "" + +#: addons/block_code/blocks/math/vector_from_angle.tres +msgid "vector from {angle: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "" +"Multiplies a vector with a number. Use this, for example, to get a point " +"some distance away along an angle." +msgstr "" + +#: addons/block_code/blocks/math/vector_multiply.tres +msgid "multiply {vector: VECTOR2} by {number: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres +msgid "move and slide" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/load_sound.tres +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +#: addons/block_code/blocks/sounds/play_sound.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Sounds" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "Play the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_play.tres +msgid "play" +msgstr "" + +#: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "Stop the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "Load a resource file as the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/load_sound.tres +msgid "load file {file_path: STRING} as sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "Pause/Continue the audio stream" +msgstr "" + +#: addons/block_code/blocks/sounds/pause_continue_sound.tres +msgid "{pause: NIL} the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "Play the audio stream with volume and pitch" +msgstr "" + +#: addons/block_code/blocks/sounds/play_sound.tres +msgid "" +"play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " +"{pitch: FLOAT}" +msgstr "" + +#: addons/block_code/blocks/sounds/stop_sound.tres +msgid "stop the sound {name: STRING}" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Lifecycle | Spawn" +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "Emitted when all active particles have finished processing." +msgstr "" + +#: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres +msgid "when particles are finished" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "Transform | Position" +msgstr "" + +#: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres +msgid "set physics position {position: VECTOR2}" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "UI" +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "Set the text for the label." +msgstr "" + +#: addons/block_code/blocks/ui/label_set_text.tres +msgid "set text to {text: STRING}" +msgstr "" + +#: addons/block_code/blocks/variables/vector2.tres +msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" +msgstr "" + +#: addons/block_code/examples/spawner/spawner.tscn +msgid "" +"[b]Up arrow:[/b] Start/stop spawning.\n" +"[b]Down arrow:[/b] Spawn once.\n" +"[b]Left arrow:[/b] Reduce spawn frequency.\n" +"[b]Right arrow:[/b] Increase spawn frequency.\n" +"\n" +"From the Inspector: Try changing spawn limit and spawn limit behavior.\n" +"\n" +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." +msgstr "" + +#: addons/block_code/inspector_plugin/block_script_inspector.gd +msgid "Open Block Script" +msgstr "" + +#: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +msgid "0" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Show Generated Script" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Delete Block Code" +msgstr "" + +#: addons/block_code/ui/main_panel.tscn +msgid "Toggle Block Picker (Ctrl+BackSlash)" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "1.0x" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Select a node to create and edit block code." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "" +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Add Block Code" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "\"{node}\" uses block coding." +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Open in Editor" +msgstr "" + +#: addons/block_code/ui/block_canvas/block_canvas.tscn +msgid "Override Block Code" +msgstr "" + +#: addons/block_code/ui/blocks/block/block.gd +msgid "Type:" +msgstr "" + +#: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn +msgid "Parameter" +msgstr "" + +#: addons/block_code/ui/picker/categories/block_category_button.tscn +msgid "Example" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create New Variable" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Create" +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Name " +msgstr "" + +#: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn +msgid "Type " +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Block Code Generated GDScript" +msgstr "" + +#: addons/block_code/ui/script_window/script_window.tscn +msgid "Copy" +msgstr "" diff --git a/addons/block_code/locale/tr.po b/addons/block_code/locale/tr.po index d8ca59b4..979cd36d 100644 --- a/addons/block_code/locale/tr.po +++ b/addons/block_code/locale/tr.po @@ -155,19 +155,19 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: tr\n" +"Language-Team: Turkish (https://app.transifex.com/endless-os/teams/9016/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" #: addons/block_code/block_code_plugin.gd msgid "Regenerate %s POT file" @@ -381,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -766,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -800,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/vi.po b/addons/block_code/locale/vi.po index 388e641a..a08e586e 100644 --- a/addons/block_code/locale/vi.po +++ b/addons/block_code/locale/vi.po @@ -155,18 +155,18 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: vi\n" +"Language-Team: Vietnamese (https://app.transifex.com/endless-os/teams/9016/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: vi\n" "Plural-Forms: nplurals=1; plural=0;\n" #: addons/block_code/block_code_plugin.gd @@ -381,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -766,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -800,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/zh_CN.po b/addons/block_code/locale/zh_CN.po index a70c14b6..8aded285 100644 --- a/addons/block_code/locale/zh_CN.po +++ b/addons/block_code/locale/zh_CN.po @@ -155,18 +155,19 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: zh_CN\n" +"Language-Team: Chinese (China) (https://app.transifex.com/endless-os/teams/9016/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" #: addons/block_code/block_code_plugin.gd msgid "Regenerate %s POT file" @@ -380,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -765,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -799,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/addons/block_code/locale/zh_TW.po b/addons/block_code/locale/zh_TW.po index 5d91e9da..2694163e 100644 --- a/addons/block_code/locale/zh_TW.po +++ b/addons/block_code/locale/zh_TW.po @@ -155,18 +155,19 @@ # res://addons/block_code/ui/title_bar/title_bar.tscn # res://addons/block_code/ui/tooltip/tooltip.gd # res://addons/block_code/ui/tooltip/tooltip.tscn -# -# Automatically generated, 2024. -# +# +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: zh_TW\n" +"Language-Team: Chinese (Taiwan) (https://app.transifex.com/endless-os/teams/9016/zh_TW/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" +"Content-Transfer-Encoding: 8-bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" #: addons/block_code/block_code_plugin.gd msgid "Regenerate %s POT file" @@ -380,14 +381,14 @@ msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "Move the character up, down, left, and right with the keyboard using the " -"given keys. The speed of movement can be adjusted separately for x (left and " -"right) and y (up and down)." +"given keys. The speed of movement can be adjusted separately for x (left and" +" right) and y (up and down)." msgstr "" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" -"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at " -"speed {speed: VECTOR2}" +"move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" +" speed {speed: VECTOR2}" msgstr "" #: addons/block_code/blocks/input/is_input_actioned.tres @@ -765,8 +766,7 @@ msgid "" "\n" "From the Inspector: Try changing spawn limit and spawn limit behavior.\n" "\n" -"Color balls remove themselves after 3 seconds. While uncolored balls are " -"only removed by the SimpleSpawner node according to the limit setings." +"Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd @@ -799,7 +799,8 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" -"Use block coding to create custom behavior and game mechanics for \"{node}\"." +"Use block coding to create custom behavior and game mechanics for " +"\"{node}\"." msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn diff --git a/project.godot b/project.godot index 0ea3615e..b8101001 100644 --- a/project.godot +++ b/project.godot @@ -21,7 +21,7 @@ enabled=PackedStringArray("res://addons/block_code/plugin.cfg", "res://addons/gu [internationalization] -locale/translations=PackedStringArray("res://addons/block_code/locale/ar.po", "res://addons/block_code/locale/bg.po", "res://addons/block_code/locale/bn.po", "res://addons/block_code/locale/ca.po", "res://addons/block_code/locale/cs.po", "res://addons/block_code/locale/de.po", "res://addons/block_code/locale/el.po", "res://addons/block_code/locale/eo.po", "res://addons/block_code/locale/es.po", "res://addons/block_code/locale/et.po", "res://addons/block_code/locale/fa.po", "res://addons/block_code/locale/fi.po", "res://addons/block_code/locale/fr.po", "res://addons/block_code/locale/ga.po", "res://addons/block_code/locale/gl.po", "res://addons/block_code/locale/he.po", "res://addons/block_code/locale/hu.po", "res://addons/block_code/locale/id.po", "res://addons/block_code/locale/it.po", "res://addons/block_code/locale/ja.po", "res://addons/block_code/locale/ka.po", "res://addons/block_code/locale/ko.po", "res://addons/block_code/locale/lv.po", "res://addons/block_code/locale/ms.po", "res://addons/block_code/locale/nb.po", "res://addons/block_code/locale/nl.po", "res://addons/block_code/locale/pl.po", "res://addons/block_code/locale/pt.po", "res://addons/block_code/locale/ro.po", "res://addons/block_code/locale/ru.po", "res://addons/block_code/locale/sk.po", "res://addons/block_code/locale/sv.po", "res://addons/block_code/locale/th.po", "res://addons/block_code/locale/tr.po", "res://addons/block_code/locale/uk.po", "res://addons/block_code/locale/vi.po", "res://addons/block_code/locale/zh_CN.po", "res://addons/block_code/locale/zh_TW.po") +locale/translations=PackedStringArray("res://addons/block_code/locale/ar.po", "res://addons/block_code/locale/az.po", "res://addons/block_code/locale/bg.po", "res://addons/block_code/locale/bn.po", "res://addons/block_code/locale/ca.po", "res://addons/block_code/locale/cs.po", "res://addons/block_code/locale/de.po", "res://addons/block_code/locale/el.po", "res://addons/block_code/locale/eo.po", "res://addons/block_code/locale/es.po", "res://addons/block_code/locale/et.po", "res://addons/block_code/locale/fa.po", "res://addons/block_code/locale/fi.po", "res://addons/block_code/locale/fr.po", "res://addons/block_code/locale/ga.po", "res://addons/block_code/locale/gl.po", "res://addons/block_code/locale/he.po", "res://addons/block_code/locale/hi.po", "res://addons/block_code/locale/hu.po", "res://addons/block_code/locale/id.po", "res://addons/block_code/locale/it.po", "res://addons/block_code/locale/ja.po", "res://addons/block_code/locale/ka.po", "res://addons/block_code/locale/ko.po", "res://addons/block_code/locale/lt.po", "res://addons/block_code/locale/lv.po", "res://addons/block_code/locale/mr.po", "res://addons/block_code/locale/ms.po", "res://addons/block_code/locale/nb.po", "res://addons/block_code/locale/nl.po", "res://addons/block_code/locale/pl.po", "res://addons/block_code/locale/pt.po", "res://addons/block_code/locale/ro.po", "res://addons/block_code/locale/ru.po", "res://addons/block_code/locale/si.po", "res://addons/block_code/locale/sk.po", "res://addons/block_code/locale/sl.po", "res://addons/block_code/locale/sq.po", "res://addons/block_code/locale/sv.po", "res://addons/block_code/locale/sw.po", "res://addons/block_code/locale/ta.po", "res://addons/block_code/locale/th.po", "res://addons/block_code/locale/tr.po", "res://addons/block_code/locale/uk.po", "res://addons/block_code/locale/vi.po", "res://addons/block_code/locale/zh_CN.po", "res://addons/block_code/locale/zh_TW.po") locale/translations_pot_files=PackedStringArray("res://addons/block_code/block_code_plugin.gd", "res://addons/block_code/block_code_node/block_code.gd", "res://addons/block_code/blocks/communication/add_node_to_group.tres", "res://addons/block_code/blocks/communication/add_to_group.tres", "res://addons/block_code/blocks/communication/area2d_on_entered.tres", "res://addons/block_code/blocks/communication/area2d_on_exited.tres", "res://addons/block_code/blocks/communication/call_method_group.tres", "res://addons/block_code/blocks/communication/call_method_node.tres", "res://addons/block_code/blocks/communication/define_method.tres", "res://addons/block_code/blocks/communication/get_node.gd", "res://addons/block_code/blocks/communication/get_node.tres", "res://addons/block_code/blocks/communication/groups.gd", "res://addons/block_code/blocks/communication/is_in_group.tres", "res://addons/block_code/blocks/communication/is_node_in_group.tres", "res://addons/block_code/blocks/communication/remove_from_group.tres", "res://addons/block_code/blocks/communication/remove_node_from_group.tres", "res://addons/block_code/blocks/communication/rigidbody2d_on_entered.tres", "res://addons/block_code/blocks/communication/rigidbody2d_on_exited.tres", "res://addons/block_code/blocks/graphics/animationplayer_is_playing.tres", "res://addons/block_code/blocks/graphics/animationplayer_pause.tres", "res://addons/block_code/blocks/graphics/animationplayer_play.gd", "res://addons/block_code/blocks/graphics/animationplayer_play.tres", "res://addons/block_code/blocks/graphics/animationplayer_stop.tres", "res://addons/block_code/blocks/graphics/viewport_center.tres", "res://addons/block_code/blocks/graphics/viewport_height.tres", "res://addons/block_code/blocks/graphics/viewport_width.tres", "res://addons/block_code/blocks/input/characterbody2d_is_on_floor.tres", "res://addons/block_code/blocks/input/characterbody2d_move.tres", "res://addons/block_code/blocks/input/is_input_actioned.gd", "res://addons/block_code/blocks/input/is_input_actioned.tres", "res://addons/block_code/blocks/lifecycle/process.tres", "res://addons/block_code/blocks/lifecycle/queue_free.tres", "res://addons/block_code/blocks/lifecycle/queue_free_node.tres", "res://addons/block_code/blocks/lifecycle/ready.tres", "res://addons/block_code/blocks/log/breakpoint.tres", "res://addons/block_code/blocks/log/concat.tres", "res://addons/block_code/blocks/log/print.tres", "res://addons/block_code/blocks/logic/and.tres", "res://addons/block_code/blocks/logic/compare.tres", "res://addons/block_code/blocks/logic/else.tres", "res://addons/block_code/blocks/logic/else_if.tres", "res://addons/block_code/blocks/logic/if.tres", "res://addons/block_code/blocks/logic/not.tres", "res://addons/block_code/blocks/logic/or.tres", "res://addons/block_code/blocks/loops/await_scene_ready.tres", "res://addons/block_code/blocks/loops/break.tres", "res://addons/block_code/blocks/loops/continue.tres", "res://addons/block_code/blocks/loops/for.tres", "res://addons/block_code/blocks/loops/while.tres", "res://addons/block_code/blocks/math/add.tres", "res://addons/block_code/blocks/math/cos.tres", "res://addons/block_code/blocks/math/divide.tres", "res://addons/block_code/blocks/math/multiply.tres", "res://addons/block_code/blocks/math/pow.tres", "res://addons/block_code/blocks/math/randf_range.tres", "res://addons/block_code/blocks/math/randi_range.tres", "res://addons/block_code/blocks/math/sin.tres", "res://addons/block_code/blocks/math/subtract.tres", "res://addons/block_code/blocks/math/tan.tres", "res://addons/block_code/blocks/math/vector2_x.tres", "res://addons/block_code/blocks/math/vector2_y.tres", "res://addons/block_code/blocks/math/vector_from_angle.tres", "res://addons/block_code/blocks/math/vector_multiply.tres", "res://addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres", "res://addons/block_code/blocks/sounds/audiostreamplayer_play.tres", "res://addons/block_code/blocks/sounds/audiostreamplayer_stop.tres", "res://addons/block_code/blocks/sounds/load_sound.tres", "res://addons/block_code/blocks/sounds/pause_continue_sound.tres", "res://addons/block_code/blocks/sounds/play_sound.tres", "res://addons/block_code/blocks/sounds/stop_sound.tres", "res://addons/block_code/blocks/spawn/cpuparticles2d_finished.tres", "res://addons/block_code/blocks/transform/rigidbody2d_physics_position.tres", "res://addons/block_code/blocks/ui/label_set_text.tres", "res://addons/block_code/blocks/variables/vector2.tres", "res://addons/block_code/code_generation/ast_list.gd", "res://addons/block_code/code_generation/block_ast.gd", "res://addons/block_code/code_generation/block_definition.gd", "res://addons/block_code/code_generation/block_extension.gd", "res://addons/block_code/code_generation/blocks_catalog.gd", "res://addons/block_code/code_generation/option_data.gd", "res://addons/block_code/code_generation/script_generator.gd", "res://addons/block_code/code_generation/util.gd", "res://addons/block_code/code_generation/variable_definition.gd", "res://addons/block_code/drag_manager/drag.gd", "res://addons/block_code/drag_manager/drag_manager.gd", "res://addons/block_code/drag_manager/drag_manager.tscn", "res://addons/block_code/examples/pong_game/ball.tscn", "res://addons/block_code/examples/pong_game/goal_area.tscn", "res://addons/block_code/examples/pong_game/player_score.tscn", "res://addons/block_code/examples/pong_game/pong_game.tscn", "res://addons/block_code/examples/pong_game/space.tscn", "res://addons/block_code/examples/spawner/ball.tscn", "res://addons/block_code/examples/spawner/spawner.tscn", "res://addons/block_code/examples/spawner/volatile_ball.tscn", "res://addons/block_code/inspector_plugin/block_script_inspector.gd", "res://addons/block_code/serialization/block_script_serialization.gd", "res://addons/block_code/serialization/block_serialization.gd", "res://addons/block_code/serialization/block_serialization_tree.gd", "res://addons/block_code/serialization/default_block_script.tres", "res://addons/block_code/serialization/value_block_serialization.gd", "res://addons/block_code/simple_nodes/simple_character/simple_character.gd", "res://addons/block_code/simple_nodes/simple_ending/simple_ending.gd", "res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd", "res://addons/block_code/simple_spawner/simple_spawner.gd", "res://addons/block_code/translation/parser.gd", "res://addons/block_code/translation/utils.gd", "res://addons/block_code/types/types.gd", "res://addons/block_code/ui/block_editor_context.gd", "res://addons/block_code/ui/block_tree_util.gd", "res://addons/block_code/ui/constants.gd", "res://addons/block_code/ui/main_panel.gd", "res://addons/block_code/ui/main_panel.tscn", "res://addons/block_code/ui/util.gd", "res://addons/block_code/ui/block_canvas/block_canvas.gd", "res://addons/block_code/ui/block_canvas/block_canvas.tscn", "res://addons/block_code/ui/blocks/block/block.gd", "res://addons/block_code/ui/blocks/control_block/control_block.gd", "res://addons/block_code/ui/blocks/control_block/control_block.tscn", "res://addons/block_code/ui/blocks/entry_block/entry_block.gd", "res://addons/block_code/ui/blocks/entry_block/entry_block.tscn", "res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd", "res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn", "res://addons/block_code/ui/blocks/statement_block/statement_block.gd", "res://addons/block_code/ui/blocks/statement_block/statement_block.tscn", "res://addons/block_code/ui/blocks/utilities/background/background.gd", "res://addons/block_code/ui/blocks/utilities/background/gutter.gd", "res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd", "res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn", "res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.gd", "res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn", "res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd", "res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn", "res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd", "res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn", "res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd", "res://addons/block_code/ui/blocks/utilities/template_editor/template_editor.tscn", "res://addons/block_code/ui/picker/picker.gd", "res://addons/block_code/ui/picker/picker.tscn", "res://addons/block_code/ui/picker/categories/block_category.gd", "res://addons/block_code/ui/picker/categories/block_category_button.gd", "res://addons/block_code/ui/picker/categories/block_category_button.tscn", "res://addons/block_code/ui/picker/categories/block_category_display.gd", "res://addons/block_code/ui/picker/categories/block_category_display.tscn", "res://addons/block_code/ui/picker/categories/category_factory.gd", "res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.gd", "res://addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn", "res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd", "res://addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn", "res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.gd", "res://addons/block_code/ui/picker/categories/variable_category/variable_category_display.tscn", "res://addons/block_code/ui/script_window/script_window.gd", "res://addons/block_code/ui/script_window/script_window.tscn", "res://addons/block_code/ui/title_bar/title_bar.gd", "res://addons/block_code/ui/title_bar/title_bar.tscn", "res://addons/block_code/ui/tooltip/tooltip.gd", "res://addons/block_code/ui/tooltip/tooltip.tscn") [rendering] From 7e78a674096f24c5b33bf66d8557f00a259ce7f3 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Mon, 4 Nov 2024 11:04:35 -0700 Subject: [PATCH 59/98] Add Godot wrapper script To ease running Godot from the command line, provide a wrapper script that looks for common Godot executables. As an escape hatch, the `GODOT` environment variable can be used to set exactly how Godot should be executed. This is very Linux-centric with only `godot` or the Godot Flatpak supported, but it can be extended as needed. --- scripts/godot.sh | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100755 scripts/godot.sh diff --git a/scripts/godot.sh b/scripts/godot.sh new file mode 100755 index 00000000..48046738 --- /dev/null +++ b/scripts/godot.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +# Wrapper script to try to execute the Godot binary. +set -e + +get_godot_bin() { + # GODOT environment variable preferred. + if [ -n "$GODOT" ]; then + echo "$GODOT" + return 0 + fi + + # godot in PATH. + if type -p godot >/dev/null; then + echo godot + return 0 + fi + + # Flatpak Godot with /exports/bin in PATH. + if type -p org.godotengine.Godot >/dev/null; then + echo org.godotengine.Godot + return 0 + fi + + # Flatpak Godot without /exports/bin in PATH. + if flatpak info org.godotengine.Godot &>/dev/null; then + echo "flatpak run org.godotengine.Godot" + return 0 + fi + + echo "error: Could not find godot executable, set GODOT environment variable" >&2 + return 1 +} + +godot_bin=$(get_godot_bin) +exec $godot_bin "$@" From 87ca19810c48a802b036db63b5ae4dd2c6ab7a1a Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Mon, 4 Nov 2024 10:47:47 -0700 Subject: [PATCH 60/98] scripts: Add regenerate pot CLI script and wrapper This can be used to execute TxUtils.regenerate_pot_file() from the CLI. The GDScript is a SceneTree script passed via Godot's --script CLI option. The shell script is a wrapper to execute Godot with all the necessary options. Since TxUtils.regenerate_pot_file() works by using the editor's Localization panel, the script has to be run with --editor. That causes a bunch of leaks that we can't do anything about. The script tries to soothe the user about the pile of warnings and errors at the end. --- addons/block_code/README.md | 4 +++- scripts/regenerate-pot.gd | 25 +++++++++++++++++++++++++ scripts/regenerate-pot.sh | 11 +++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 scripts/regenerate-pot.gd create mode 100755 scripts/regenerate-pot.sh diff --git a/addons/block_code/README.md b/addons/block_code/README.md index 55a0e4d0..d3362834 100644 --- a/addons/block_code/README.md +++ b/addons/block_code/README.md @@ -92,7 +92,9 @@ up to date. * If translatable strings have changed, the POT file needs to be updated. This can be done by using the **Generate POT** dialog in the [POT Generation][pot-generation] tab. Or you can use the **Project → Tools → - Regenerate BlockCode POT file** menu item in the editor. + Regenerate BlockCode POT file** menu item in the editor. From the command + line, the POT file can be regenerated with the `scripts/regenerate-pot.sh` + shell script. * If the POT file has changed, the PO message files need to be updated. This can be done using the gettext `msgmerge` tool in the diff --git a/scripts/regenerate-pot.gd b/scripts/regenerate-pot.gd new file mode 100644 index 00000000..16720f46 --- /dev/null +++ b/scripts/regenerate-pot.gd @@ -0,0 +1,25 @@ +## BlockCode POT regeneration script +## +## Use this on the Godot command line with the --script option. This depends on +## the Godot editor, so the --editor option is also required. +extends SceneTree + +const TxUtils := preload("res://addons/block_code/translation/utils.gd") + + +# Everything happens in _process to ensure the editor is fully initialized. +func _process(_delta): + if Engine.is_editor_hint(): + TxUtils.regenerate_pot_file() + else: + push_error("%s can only be run with --editor" % get_script().resource_path) + + # Stop processing the main loop. + return true + + +# The editor won't be shut down in the normal way, which will cause a bunch of +# leaks. There's nothing we can do about that and we don't care about them, +# anyways. Let the user following along know this is OK. +func _finalize(): + print_rich("[b]%s causes Godot to leak resources. Ignore the warnings and errors![/b]" % get_script().resource_path.get_file()) diff --git a/scripts/regenerate-pot.sh b/scripts/regenerate-pot.sh new file mode 100755 index 00000000..dca7c938 --- /dev/null +++ b/scripts/regenerate-pot.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +# Wrapper script to try to execute the regenerate-pot.gd main loop script. +set -e + +SCRIPTDIR=$(dirname "$0") +PROJDIR=$(dirname "$SCRIPTDIR") +GODOT_SH="$SCRIPTDIR/godot.sh" +SCRIPT="$SCRIPTDIR/regenerate-pot.gd" + +exec "$GODOT_SH" --path "$PROJDIR" --headless --editor --script "$SCRIPT" From 8708bb60a84cd5e13964d7728d9cc633d8d20174 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Mon, 4 Nov 2024 11:51:13 -0700 Subject: [PATCH 61/98] scripts: Add update POT files CLI script and wrapper This can be used to execute TxUtils.update_pot_files() from the CLI. The GDScript is a SceneTree script passed via Godot's --script CLI option. The shell script is a wrapper to execute Godot with all the necessary options. Unlike TxUtils.regenerate_pot(), the editor isn't required, so everything can happen from _init(). --- addons/block_code/README.md | 4 +++- scripts/update-pot-files.gd | 11 +++++++++++ scripts/update-pot-files.sh | 11 +++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 scripts/update-pot-files.gd create mode 100755 scripts/update-pot-files.sh diff --git a/addons/block_code/README.md b/addons/block_code/README.md index d3362834..9f030170 100644 --- a/addons/block_code/README.md +++ b/addons/block_code/README.md @@ -87,7 +87,9 @@ up to date. * If files are added or removed, the list of translatable files needs to be updated. This can be done by using the **Add** dialog in the [POT Generation][pot-generation] tab. Or you can use the **Project → Tools → - Update BlockCode translated files** menu item in the editor. + Update BlockCode translated files** menu item in the editor. From the command + line, the POT file can be regenerated with the `scripts/update-pot-files.sh` + shell script. * If translatable strings have changed, the POT file needs to be updated. This can be done by using the **Generate POT** dialog in the [POT diff --git a/scripts/update-pot-files.gd b/scripts/update-pot-files.gd new file mode 100644 index 00000000..149074b0 --- /dev/null +++ b/scripts/update-pot-files.gd @@ -0,0 +1,11 @@ +## BlockCode update translated files script +## +## Use this on the Godot command line with the --script option. +extends SceneTree + +const TxUtils := preload("res://addons/block_code/translation/utils.gd") + + +func _init(): + TxUtils.update_pot_files() + quit() diff --git a/scripts/update-pot-files.sh b/scripts/update-pot-files.sh new file mode 100755 index 00000000..9280acee --- /dev/null +++ b/scripts/update-pot-files.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +# Wrapper script to try to execute the update-pot-files.gd main loop script. +set -e + +SCRIPTDIR=$(dirname "$0") +PROJDIR=$(dirname "$SCRIPTDIR") +GODOT_SH="$SCRIPTDIR/godot.sh" +SCRIPT="$SCRIPTDIR/update-pot-files.gd" + +exec "$GODOT_SH" --path "$PROJDIR" --headless --script "$SCRIPT" From 9dcb6ef96201668233c85f327b21d36c047c4a3d Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Mon, 4 Nov 2024 12:00:24 -0700 Subject: [PATCH 62/98] scripts: Add script to merge translation messages Since the other components can be scripted, we might as well add a wrapper script to merge new translation strings into PO files. --- addons/block_code/README.md | 9 ++------- scripts/merge-messages.sh | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 7 deletions(-) create mode 100755 scripts/merge-messages.sh diff --git a/addons/block_code/README.md b/addons/block_code/README.md index 9f030170..c3625cdd 100644 --- a/addons/block_code/README.md +++ b/addons/block_code/README.md @@ -99,13 +99,8 @@ up to date. shell script. * If the POT file has changed, the PO message files need to be updated. This - can be done using the gettext `msgmerge` tool in the - `addons/block_code/locale` directory: - ``` - for po in *.po; do - msgmerge --update --backup=none "$po" godot_block_coding.pot - done - ``` + can be done using the gettext `msgmerge` tool with the + `scripts/merge-messages.sh` shell script. [pot-generation]: https://docs.godotengine.org/en/stable/tutorials/i18n/localization_using_gettext.html#automatic-generation-using-the-editor diff --git a/scripts/merge-messages.sh b/scripts/merge-messages.sh new file mode 100755 index 00000000..90871dfb --- /dev/null +++ b/scripts/merge-messages.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +# Merge new strings from POT file into message catalogs. +set -e + +SCRIPTDIR=$(dirname "$0") +PROJDIR=$(dirname "$SCRIPTDIR") +LOCALEDIR="$PROJDIR/addons/block_code/locale" +POT="$LOCALEDIR/godot_block_coding.pot" + +for po in "$LOCALEDIR"/*.po; do + echo -n "$po" + msgmerge --update --backup=none "$po" "$POT" +done From 78c197af3b7b517c94433b45340ded975b8cda13 Mon Sep 17 00:00:00 2001 From: Jian-Hong Pan Date: Wed, 6 Nov 2024 12:35:27 +0800 Subject: [PATCH 63/98] README: Add info of drag & drop node's property from Inspector Add how to drag & drop node's property as getter & setter blocks from the Inspector dock. This follows #296. https://phabricator.endlessm.com/T35649 --- addons/block_code/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/addons/block_code/README.md b/addons/block_code/README.md index 55a0e4d0..7cadbd06 100644 --- a/addons/block_code/README.md +++ b/addons/block_code/README.md @@ -62,6 +62,9 @@ We have some high level blocks for simplifying common game elements. Add a Simpl Lean into animations! Godot's animations functionality goes beyond just simple animations of graphics. You can do so much by combining block coding with Godot's powerful animations editor. +If you want to access the node's property, you can drag the property from the Inspector dock and drop it into the block script as a getter block. And, if you want to modify the property's value, please press & hold Ctrl key when you drop the property, then it will be a setter block of the property in the block script. + + ## Feedback Please share feedback in the [Godot Forum Block Coding thread](https://forum.godotengine.org/t/block-coding-high-level-block-based-visual-programming/68941). From d88cae73eb5efb371a0446bb562537a56076e43f Mon Sep 17 00:00:00 2001 From: vanessa-chang Date: Fri, 1 Nov 2024 18:02:01 +0800 Subject: [PATCH 64/98] Add switch_scene resource This is a basic scene-switching block using a string. If we have time later, we can make further improvements by adding a block for loading a scene and using that as the argument to the switch_scene block to implement PackedScene. https://phabricator.endlessm.com/T35706 --- .../blocks/communication/switch_scene.tres | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 addons/block_code/blocks/communication/switch_scene.tres diff --git a/addons/block_code/blocks/communication/switch_scene.tres b/addons/block_code/blocks/communication/switch_scene.tres new file mode 100644 index 00000000..cf1bfe7e --- /dev/null +++ b/addons/block_code/blocks/communication/switch_scene.tres @@ -0,0 +1,18 @@ +[gd_resource type="Resource" load_steps=2 format=3 uid="uid://dnc2555wnobks"] + +[ext_resource type="Script" path="res://addons/block_code/code_generation/block_definition.gd" id="1_rnqd5"] + +[resource] +script = ExtResource("1_rnqd5") +name = &"switch_scene" +target_node_class = "" +description = "Stop playing the current scene, and switch to a different one. You might use this to switch to a new level." +category = "Communication | Methods" +type = 2 +variant_type = 0 +display_template = "switch the scene to {file_path: STRING}" +code_template = "get_tree().change_scene_to_file({file_path}) +" +defaults = {} +signal_name = "" +scope = "" From 5183180555e9a8feb376e6434802657805795004 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Wed, 6 Nov 2024 17:02:25 +0000 Subject: [PATCH 65/98] README: Adjust testing instruction explanations --- addons/block_code/README.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/addons/block_code/README.md b/addons/block_code/README.md index 5d328813..9eaf8ca8 100644 --- a/addons/block_code/README.md +++ b/addons/block_code/README.md @@ -156,11 +156,14 @@ Tests can also be run from the command line using the GUT command line script: godot --path . --headless --script addons/gut/gut_cmdln.gd -gexit ``` -A few options are of note here. `--path` instructs Godot to use the project in -the current directory. `--headless` instructs Godot to run without a display or -sound. `--script` instructs Godot to run the GUT command line script instead of -running the main scene. `-gexit` is an option for the GUT command line script -that instructs GUT to exit after the tests complete. +A few options are of note here: + +- `--path` instructs Godot to use the project in the current directory. +- `--headless` instructs Godot to run without a display or sound. +- `--script` instructs Godot to run the GUT command line script instead of + running the main scene. +- `-gexit` is an option for the GUT command line script that instructs GUT to + exit after the tests complete. There are several other GUT command line options for running specific tests. For example, `-gtest=path/to/test_script_1.gd,path/to/test_script_2.gd` can be From ad5a560cef4f7009258fb569bcf0919cbee75a96 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Mon, 4 Nov 2024 12:47:20 +0000 Subject: [PATCH 66/98] ci: Use -s not --script to run tests gut's cmdline script accepts a number of command-line arguments. It appears that the Godot engine removes most of its own options from the argument list available to user code, but it leaves any `--script FOO` or `-s FOO` arguments in place. gut 9.2.1 understands both the `--script` and `-s` forms, but gut 9.3.0 only understands the `-s` form and raises an error if the `--script` form is used. https://github.com/bitwes/Gut/issues/667 --- .github/workflows/checks.yaml | 2 +- addons/block_code/README.md | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/checks.yaml b/.github/workflows/checks.yaml index f8057221..492c4015 100644 --- a/.github/workflows/checks.yaml +++ b/.github/workflows/checks.yaml @@ -42,4 +42,4 @@ jobs: godot --path . --headless --import - name: Run tests run: | - godot --path . --headless --script addons/gut/gut_cmdln.gd -gexit + godot --path . --headless -s addons/gut/gut_cmdln.gd -gexit diff --git a/addons/block_code/README.md b/addons/block_code/README.md index 9eaf8ca8..5d871e87 100644 --- a/addons/block_code/README.md +++ b/addons/block_code/README.md @@ -153,15 +153,17 @@ This plugin uses the [Godot Unit Test](https://gut.readthedocs.io/en/latest/) (G Tests can also be run from the command line using the GUT command line script: ``` -godot --path . --headless --script addons/gut/gut_cmdln.gd -gexit +godot --path . --headless -s addons/gut/gut_cmdln.gd -gexit ``` A few options are of note here: - `--path` instructs Godot to use the project in the current directory. - `--headless` instructs Godot to run without a display or sound. -- `--script` instructs Godot to run the GUT command line script instead of - running the main scene. +- `-s` instructs Godot to run the GUT command line script instead of + running the main scene. Due to a [bug in + GUT](https://github.com/bitwes/Gut/issues/667), the long form `--script` + cannot be used. - `-gexit` is an option for the GUT command line script that instructs GUT to exit after the tests complete. From 31b09aa9457876a7540e72d8abda2f025921ed02 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Mon, 4 Nov 2024 10:46:39 +0000 Subject: [PATCH 67/98] Update Gut addon to 9.3.0 --- addons/gut/GutScene.gd | 3 + addons/gut/autofree.gd | 2 - addons/gut/awaiter.gd | 59 +- addons/gut/cli/gut_cli.gd | 298 ++++++++++ addons/gut/cli/optparse.gd | 511 ++++++++++++++++++ addons/gut/collected_script.gd | 223 ++++---- addons/gut/collected_test.gd | 77 +-- addons/gut/comparator.gd | 30 +- addons/gut/diff_formatter.gd | 3 +- addons/gut/diff_tool.gd | 11 +- .../double_templates/function_template.txt | 5 +- addons/gut/double_tools.gd | 30 +- addons/gut/doubler.gd | 36 +- addons/gut/dynamic_gdscript.gd | 29 + addons/gut/fonts/AnonymousPro-Bold.ttf.import | 1 - .../fonts/AnonymousPro-BoldItalic.ttf.import | 1 - .../gut/fonts/AnonymousPro-Italic.ttf.import | 1 - .../gut/fonts/AnonymousPro-Regular.ttf.import | 1 - addons/gut/fonts/CourierPrime-Bold.ttf.import | 1 - .../fonts/CourierPrime-BoldItalic.ttf.import | 1 - .../gut/fonts/CourierPrime-Italic.ttf.import | 1 - .../gut/fonts/CourierPrime-Regular.ttf.import | 1 - addons/gut/fonts/LobsterTwo-Bold.ttf.import | 1 - .../fonts/LobsterTwo-BoldItalic.ttf.import | 1 - addons/gut/fonts/LobsterTwo-Italic.ttf.import | 1 - .../gut/fonts/LobsterTwo-Regular.ttf.import | 1 - addons/gut/gui/GutControl.gd | 5 +- addons/gut/gui/GutRunner.gd | 176 ++++-- addons/gut/gui/ResizeHandle.gd | 29 +- addons/gut/gui/ResultsTree.gd | 7 +- addons/gut/gui/gut_gui.gd | 11 +- addons/gut/gut.gd | 221 ++++---- addons/gut/gut_cmdln.gd | 316 +---------- addons/gut/gut_config.gd | 9 +- addons/gut/gut_to_move.gd | 3 +- addons/gut/input_sender.gd | 17 +- addons/gut/junit_xml_export.gd | 22 +- addons/gut/lazy_loader.gd | 38 ++ addons/gut/logger.gd | 18 +- addons/gut/method_maker.gd | 12 +- addons/gut/optparse.gd | 252 --------- addons/gut/orphan_counter.gd | 69 ++- addons/gut/parameter_handler.gd | 3 +- addons/gut/plugin.cfg | 2 +- addons/gut/result_exporter.gd | 21 +- addons/gut/script_parser.gd | 39 +- addons/gut/signal_watcher.gd | 9 +- addons/gut/spy.gd | 5 +- addons/gut/strutils.gd | 14 +- addons/gut/stub_params.gd | 34 +- addons/gut/stubber.gd | 18 +- addons/gut/summary.gd | 41 +- addons/gut/test.gd | 209 +++++-- addons/gut/test_collector.gd | 33 +- addons/gut/thing_counter.gd | 20 +- addons/gut/utils.gd | 482 +++++++++-------- addons/gut/version_numbers.gd | 122 +++++ addons/gut/warnings_manager.gd | 137 +++++ 58 files changed, 2306 insertions(+), 1417 deletions(-) create mode 100644 addons/gut/cli/gut_cli.gd create mode 100644 addons/gut/cli/optparse.gd create mode 100644 addons/gut/dynamic_gdscript.gd create mode 100644 addons/gut/lazy_loader.gd delete mode 100644 addons/gut/optparse.gd create mode 100644 addons/gut/version_numbers.gd create mode 100644 addons/gut/warnings_manager.gd diff --git a/addons/gut/GutScene.gd b/addons/gut/GutScene.gd index d9362ab2..c38b1d34 100644 --- a/addons/gut/GutScene.gd +++ b/addons/gut/GutScene.gd @@ -125,3 +125,6 @@ func use_compact_mode(should=true): func set_opacity(val): _normal_gui.modulate.a = val _compact_gui.modulate.a = val + +func set_title(text): + _set_both_titles(text) diff --git a/addons/gut/autofree.gd b/addons/gut/autofree.gd index b82676bc..e35f7f57 100644 --- a/addons/gut/autofree.gd +++ b/addons/gut/autofree.gd @@ -55,5 +55,3 @@ func free_all(): if(is_instance_valid(_to_queue_free[i])): _to_queue_free[i].queue_free() _to_queue_free.clear() - - diff --git a/addons/gut/awaiter.gd b/addons/gut/awaiter.gd index 773850a0..c36f59ea 100644 --- a/addons/gut/awaiter.gd +++ b/addons/gut/awaiter.gd @@ -3,12 +3,21 @@ extends Node signal timeout signal wait_started -var _wait_time = 0.0 -var _wait_frames = 0 +var _wait_time := 0.0 +var _wait_frames := 0 var _signal_to_wait_on = null -var _elapsed_time = 0.0 -var _elapsed_frames = 0 +var _predicate_function_waiting_to_be_true = null +var _predicate_time_between := 0.0 +var _predicate_time_between_elpased := 0.0 + +var _did_last_wait_timeout = false +var did_last_wait_timeout = false : + get: return _did_last_wait_timeout + set(val): push_error("Cannot set did_last_wait_timeout") + +var _elapsed_time := 0.0 +var _elapsed_frames := 0 func _physics_process(delta): @@ -22,14 +31,30 @@ func _physics_process(delta): if(_elapsed_frames >= _wait_frames): _end_wait() + if(_predicate_function_waiting_to_be_true != null): + _predicate_time_between_elpased += delta + if(_predicate_time_between_elpased >= _predicate_time_between): + _predicate_time_between_elpased = 0.0 + var result = _predicate_function_waiting_to_be_true.call() + if(typeof(result) == TYPE_BOOL and result): + _end_wait() + func _end_wait(): + # Check for time before checking for frames so that the extra frames added + # when waiting on a signal do not cause a false negative for timing out. + if(_wait_time > 0): + _did_last_wait_timeout = _elapsed_time >= _wait_time + elif(_wait_frames > 0): + _did_last_wait_timeout = _elapsed_frames >= _wait_frames + if(_signal_to_wait_on != null and _signal_to_wait_on.is_connected(_signal_callback)): _signal_to_wait_on.disconnect(_signal_callback) _wait_time = 0.0 _wait_frames = 0 _signal_to_wait_on = null + _predicate_function_waiting_to_be_true = null _elapsed_time = 0.0 _elapsed_frames = 0 timeout.emit() @@ -37,9 +62,9 @@ func _end_wait(): const ARG_NOT_SET = '_*_argument_*_is_*_not_set_*_' func _signal_callback( - arg1=ARG_NOT_SET, arg2=ARG_NOT_SET, arg3=ARG_NOT_SET, - arg4=ARG_NOT_SET, arg5=ARG_NOT_SET, arg6=ARG_NOT_SET, - arg7=ARG_NOT_SET, arg8=ARG_NOT_SET, arg9=ARG_NOT_SET): + _arg1=ARG_NOT_SET, _arg2=ARG_NOT_SET, _arg3=ARG_NOT_SET, + _arg4=ARG_NOT_SET, _arg5=ARG_NOT_SET, _arg6=ARG_NOT_SET, + _arg7=ARG_NOT_SET, _arg8=ARG_NOT_SET, _arg9=ARG_NOT_SET): _signal_to_wait_on.disconnect(_signal_callback) # DO NOT _end_wait here. For other parts of the test to get the signal that @@ -47,24 +72,34 @@ func _signal_callback( # signal_watcher doesn't get the signal in time if we don't do this. _wait_frames = 2 - -func wait_for(x): +func wait_seconds(x): + _did_last_wait_timeout = false _wait_time = x wait_started.emit() func wait_frames(x): + _did_last_wait_timeout = false _wait_frames = x wait_started.emit() -func wait_for_signal(the_signal, x): +func wait_for_signal(the_signal, max_time): + _did_last_wait_timeout = false the_signal.connect(_signal_callback) _signal_to_wait_on = the_signal - _wait_time = x + _wait_time = max_time + wait_started.emit() + + +func wait_until(predicate_function: Callable, max_time, time_between_calls:=0.0): + _predicate_time_between = time_between_calls + _predicate_function_waiting_to_be_true = predicate_function + _predicate_time_between_elpased = 0.0 + _did_last_wait_timeout = false + _wait_time = max_time wait_started.emit() func is_waiting(): return _wait_time != 0.0 || _wait_frames != 0 - diff --git a/addons/gut/cli/gut_cli.gd b/addons/gut/cli/gut_cli.gd new file mode 100644 index 00000000..df5613f6 --- /dev/null +++ b/addons/gut/cli/gut_cli.gd @@ -0,0 +1,298 @@ +extends Node + +var Optparse = load('res://addons/gut/cli/optparse.gd') +var Gut = load('res://addons/gut/gut.gd') +var GutRunner = load('res://addons/gut/gui/GutRunner.tscn') + +# ------------------------------------------------------------------------------ +# Helper class to resolve the various different places where an option can +# be set. Using the get_value method will enforce the order of precedence of: +# 1. command line value +# 2. config file value +# 3. default value +# +# The idea is that you set the base_opts. That will get you a copies of the +# hash with null values for the other types of values. Lower precedented hashes +# will punch through null values of higher precedented hashes. +# ------------------------------------------------------------------------------ +class OptionResolver: + var base_opts = {} + var cmd_opts = {} + var config_opts = {} + + + func get_value(key): + return _nvl(cmd_opts[key], _nvl(config_opts[key], base_opts[key])) + + func set_base_opts(opts): + base_opts = opts + cmd_opts = _null_copy(opts) + config_opts = _null_copy(opts) + + # creates a copy of a hash with all values null. + func _null_copy(h): + var new_hash = {} + for key in h: + new_hash[key] = null + return new_hash + + func _nvl(a, b): + if(a == null): + return b + else: + return a + + func _string_it(h): + var to_return = '' + for key in h: + to_return += str('(',key, ':', _nvl(h[key], 'NULL'), ')') + return to_return + + func to_s(): + return str("base:\n", _string_it(base_opts), "\n", \ + "config:\n", _string_it(config_opts), "\n", \ + "cmd:\n", _string_it(cmd_opts), "\n", \ + "resolved:\n", _string_it(get_resolved_values())) + + func get_resolved_values(): + var to_return = {} + for key in base_opts: + to_return[key] = get_value(key) + return to_return + + func to_s_verbose(): + var to_return = '' + var resolved = get_resolved_values() + for key in base_opts: + to_return += str(key, "\n") + to_return += str(' default: ', _nvl(base_opts[key], 'NULL'), "\n") + to_return += str(' config: ', _nvl(config_opts[key], ' --'), "\n") + to_return += str(' cmd: ', _nvl(cmd_opts[key], ' --'), "\n") + to_return += str(' final: ', _nvl(resolved[key], 'NULL'), "\n") + + return to_return + +# ------------------------------------------------------------------------------ +# Here starts the actual script that uses the Options class to kick off Gut +# and run your tests. +# ------------------------------------------------------------------------------ +var _gut_config = load('res://addons/gut/gut_config.gd').new() + +# array of command line options specified +var _final_opts = [] + + +func setup_options(options, font_names): + var opts = Optparse.new() + opts.banner =\ +""" +The GUT CLI +----------- +The default behavior for GUT is to load options from a res://.gutconfig.json if +it exists. Any options specified on the command line will take precedence over +options specified in the gutconfig file. You can specify a different gutconfig +file with the -gconfig option. + +To generate a .gutconfig.json file you can use -gprint_gutconfig_sample +To see the effective values of a CLI command and a gutconfig use -gpo + +Values for options can be supplied using: + option=value # no space around "=" + option value # a space between option and value w/o = + +Options whose values are lists/arrays can be specified multiple times: + -gdir=a,b + -gdir c,d + -gdir e + # results in -gdir equaling [a, b, c, d, e] +""" + opts.add_heading("Test Config:") + opts.add('-gdir', options.dirs, 'List of directories to search for test scripts in.') + opts.add('-ginclude_subdirs', false, 'Flag to include all subdirectories specified with -gdir.') + opts.add('-gtest', [], 'List of full paths to test scripts to run.') + opts.add('-gprefix', options.prefix, 'Prefix used to find tests when specifying -gdir. Default "[default]".') + opts.add('-gsuffix', options.suffix, 'Test script suffix, including .gd extension. Default "[default]".') + opts.add('-gconfig', 'res://.gutconfig.json', 'The config file to load options from. The default is [default]. Use "-gconfig=" to not use a config file.') + opts.add('-gpre_run_script', '', 'pre-run hook script path') + opts.add('-gpost_run_script', '', 'post-run hook script path') + opts.add('-gerrors_do_not_cause_failure', false, 'When an internal GUT error occurs tests will fail. With this option set, that does not happen.') + opts.add('-gdouble_strategy', 'SCRIPT_ONLY', 'Default strategy to use when doubling. Valid values are [INCLUDE_NATIVE, SCRIPT_ONLY]. Default "[default]"') + + opts.add_heading("Run Options:") + opts.add('-gselect', '', 'All scripts that contain the specified string in their filename will be ran') + opts.add('-ginner_class', '', 'Only run inner classes that contain the specified string in their name.') + opts.add('-gunit_test_name', '', 'Any test that contains the specified text will be run, all others will be skipped.') + opts.add('-gexit', false, 'Exit after running tests. If not specified you have to manually close the window.') + opts.add('-gexit_on_success', false, 'Only exit if zero tests fail.') + opts.add('-gignore_pause', false, 'Ignores any calls to pause_before_teardown.') + + opts.add_heading("Display Settings:") + opts.add('-glog', options.log_level, 'Log level [0-3]. Default [default]') + opts.add('-ghide_orphans', false, 'Display orphan counts for tests and scripts. Default [default].') + opts.add('-gmaximize', false, 'Maximizes test runner window to fit the viewport.') + opts.add('-gcompact_mode', false, 'The runner will be in compact mode. This overrides -gmaximize.') + opts.add('-gopacity', options.opacity, 'Set opacity of test runner window. Use range 0 - 100. 0 = transparent, 100 = opaque.') + opts.add('-gdisable_colors', false, 'Disable command line colors.') + opts.add('-gfont_name', options.font_name, str('Valid values are: ', font_names, '. Default "[default]"')) + opts.add('-gfont_size', options.font_size, 'Font size, default "[default]"') + opts.add('-gbackground_color', options.background_color, 'Background color as an html color, default "[default]"') + opts.add('-gfont_color',options.font_color, 'Font color as an html color, default "[default]"') + opts.add('-gpaint_after', options.paint_after, 'Delay before GUT will add a 1 frame pause to paint the screen/GUI. default [default]') + + opts.add_heading("Result Export:") + opts.add('-gjunit_xml_file', options.junit_xml_file, 'Export results of run to this file in the Junit XML format.') + opts.add('-gjunit_xml_timestamp', options.junit_xml_timestamp, 'Include a timestamp in the -gjunit_xml_file, default [default]') + + opts.add_heading("Help:") + opts.add('-gh', false, 'Print this help. You did this to see this, so you probably understand.') + opts.add('-gpo', false, 'Print option values from all sources and the value used.') + opts.add('-gprint_gutconfig_sample', false, 'Print out json that can be used to make a gutconfig file.') + + return opts + + +# Parses options, applying them to the _tester or setting values +# in the options struct. +func extract_command_line_options(from, to): + to.config_file = from.get_value_or_null('-gconfig') + to.dirs = from.get_value_or_null('-gdir') + to.disable_colors = from.get_value_or_null('-gdisable_colors') + to.double_strategy = from.get_value_or_null('-gdouble_strategy') + to.ignore_pause = from.get_value_or_null('-gignore_pause') + to.include_subdirs = from.get_value_or_null('-ginclude_subdirs') + to.inner_class = from.get_value_or_null('-ginner_class') + to.log_level = from.get_value_or_null('-glog') + to.opacity = from.get_value_or_null('-gopacity') + to.post_run_script = from.get_value_or_null('-gpost_run_script') + to.pre_run_script = from.get_value_or_null('-gpre_run_script') + to.prefix = from.get_value_or_null('-gprefix') + to.selected = from.get_value_or_null('-gselect') + to.should_exit = from.get_value_or_null('-gexit') + to.should_exit_on_success = from.get_value_or_null('-gexit_on_success') + to.should_maximize = from.get_value_or_null('-gmaximize') + to.compact_mode = from.get_value_or_null('-gcompact_mode') + to.hide_orphans = from.get_value_or_null('-ghide_orphans') + to.suffix = from.get_value_or_null('-gsuffix') + to.errors_do_not_cause_failure = from.get_value_or_null('-gerrors_do_not_cause_failure') + to.tests = from.get_value_or_null('-gtest') + to.unit_test_name = from.get_value_or_null('-gunit_test_name') + + to.font_size = from.get_value_or_null('-gfont_size') + to.font_name = from.get_value_or_null('-gfont_name') + to.background_color = from.get_value_or_null('-gbackground_color') + to.font_color = from.get_value_or_null('-gfont_color') + to.paint_after = from.get_value_or_null('-gpaint_after') + + to.junit_xml_file = from.get_value_or_null('-gjunit_xml_file') + to.junit_xml_timestamp = from.get_value_or_null('-gjunit_xml_timestamp') + + + +func _print_gutconfigs(values): + var header = """Here is a sample of a full .gutconfig.json file. +You do not need to specify all values in your own file. The values supplied in +this sample are what would be used if you ran gut w/o the -gprint_gutconfig_sample +option. Option priority is: command-line, .gutconfig, default).""" + print("\n", header.replace("\n", ' '), "\n") + var resolved = values + + # remove_at some options that don't make sense to be in config + resolved.erase("config_file") + resolved.erase("show_help") + + print(JSON.stringify(resolved, ' ')) + + for key in resolved: + resolved[key] = null + + print("\n\nAnd here's an empty config for you fill in what you want.") + print(JSON.stringify(resolved, ' ')) + + +func _run_tests(opt_resolver): + _final_opts = opt_resolver.get_resolved_values(); + _gut_config.options = _final_opts + + var runner = GutRunner.instantiate() + runner.ran_from_editor = false + runner.set_gut_config(_gut_config) + get_tree().root.add_child(runner) + + runner.run_tests() + + +# parse options and run Gut +func main(): + var opt_resolver = OptionResolver.new() + opt_resolver.set_base_opts(_gut_config.default_options) + + var cli_opts = setup_options(_gut_config.default_options, _gut_config.valid_fonts) + + cli_opts.parse() + var all_options_valid = cli_opts.unused.size() == 0 + extract_command_line_options(cli_opts, opt_resolver.cmd_opts) + + var config_path = opt_resolver.get_value('config_file') + var load_result = 1 + # Checking for an empty config path allows us to not use a config file via + # the -gconfig_file option since using "-gconfig_file=" or -gconfig_file=''" + # will result in an empty string. + if(config_path != ''): + load_result = _gut_config.load_options_no_defaults(config_path) + + # SHORTCIRCUIT + if(!all_options_valid): + print('Unknown arguments: ', cli_opts.unused) + get_tree().quit(1) + elif(load_result == -1): + print('Invalid gutconfig ', load_result) + get_tree().quit(1) + else: + opt_resolver.config_opts = _gut_config.options + + if(cli_opts.get_value('-gh')): + print(GutUtils.version_numbers.get_version_text()) + cli_opts.print_help() + get_tree().quit(0) + elif(cli_opts.get_value('-gpo')): + print('All config options and where they are specified. ' + + 'The "final" value shows which value will actually be used ' + + 'based on order of precedence (default < .gutconfig < cmd line).' + "\n") + print(opt_resolver.to_s_verbose()) + get_tree().quit(0) + elif(cli_opts.get_value('-gprint_gutconfig_sample')): + _print_gutconfigs(opt_resolver.get_resolved_values()) + get_tree().quit(0) + else: + _run_tests(opt_resolver) + + + +# ############################################################################## +#(G)odot (U)nit (T)est class +# +# ############################################################################## +# The MIT License (MIT) +# ===================== +# +# Copyright (c) 2023 Tom "Butch" Wesley +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +# ############################################################################## diff --git a/addons/gut/cli/optparse.gd b/addons/gut/cli/optparse.gd new file mode 100644 index 00000000..3c6433f6 --- /dev/null +++ b/addons/gut/cli/optparse.gd @@ -0,0 +1,511 @@ +# ############################################################################## +# Parses options from the command line, as one might expect. It can also +# generate help text that displays all the arguments your script accepts. +# +# This does alot, if you want to see it in action have a look at +# scratch/optparse_example.gd +# +# +# Godot Argument Lists +# ------------------------- +# There are two sets of command line arguments that Godot populates: +# OS.get_cmdline_args +# OS.get_cmdline_user_args. +# +# OS.get_cmdline_args contains any arguments that are not used by the engine +# itself. This means options like --help and -d will never appear in this list +# since these are used by the engine. The one exception is the -s option which +# is always included as the first entry and the script path as the second. +# Optparse ignores these values for argument processing but can be accessed +# with my_optparse.options.script_option. This list does not contain any +# arguments that appear in OS.get_cmdline_user_args. +# +# OS.get_cmdline_user_args contains any arguments that appear on the command +# line AFTER " -- " or " ++ ". This list CAN contain options that the engine +# would otherwise use, and are ignored completely by the engine. +# +# The parse method, by default, includes arguments from OS.get_cmdline_args and +# OS.get_cmdline_user_args. You can optionally pass one of these to the parse +# method to limit which arguments are parsed. You can also conjure up your own +# array of arguments and pass that to parse. +# +# See Godot's documentation for get_cmdline_args and get_cmdline_user_args for +# more information. +# +# +# Adding Options +# -------------- +# Use the following to add options to be parsed. These methods return the +# created Option instance. See that class above for more info. You can use +# the returned instance to get values, or use get_value/get_value_or_null. +# add("--name", "default", "Description goes here") +# add_required("--name", "default", "Description goes here") +# add_positional("--name", "default", "Description goes here") +# add_positional_required("--name", "default", "Description goes here") +# +# get_value will return the value of the option or the default if it was not +# set. get_value_or_null will return the value of the option or null if it was +# not set. +# +# The Datatype for an option is determined from the default value supplied to +# the various add methods. Supported types are +# String +# Int +# Float +# Array of strings +# Boolean +# +# +# Value Parsing +# ------------- +# optparse uses option_name_prefix to differentiate between option names and +# values. Any argument that starts with this value will be treated as an +# argument name. The default is "-". Set this before calling parse if you want +# to change it. +# +# Values for options can be supplied on the command line with or without an "=": +# option=value # no space around "=" +# option value # a space between option and value w/o = +# There is no way to escape "=" at this time. +# +# Array options can be specified multiple times and/or set from a comma delimited +# list. +# -gdir=a,b +# -gdir c,d +# -gdir e +# Results in -gdir equaling [a, b, c, d, e]. There is no way to escape commas +# at this time. +# +# To specify an empty list via the command line follow the option with an equal +# sign +# -gdir= +# +# Boolean options will have thier value set to !default when they are supplied +# on the command line. Boolean options cannot have a value on the command line. +# They are either supplied or not. +# +# If a value is not an array and is specified multiple times on the command line +# then the last entry will be used as the value. +# +# Positional argument values are parsed after all named arguments are parsed. +# This means that other options can appear before, between, and after positional +# arguments. +# --foo=bar positional_0_value --disabled --bar foo positional_1_value --a_flag +# +# Anything that is not used by named or positional arguments will appear in the +# unused property. You can use this to detect unrecognized arguments or treat +# everything else provided as a list of things, or whatever you want. You can +# use is_option on the elements of unused (or whatever you want really) to see +# if optparse would treat it as an option name. +# +# Use get_missing_required_options to get an array of Option with all required +# options that were not found when parsing. +# +# The parsed_args property holds the list of arguments that were parsed. +# +# +# Help Generation +# --------------- +# You can call get_help to generate help text, or you can just call print_help +# and this will print it for you. +# +# Set the banner property to any text you want to appear before the usage and +# options sections. +# +# Options are printed in the order they are added. You can add a heading for +# different options sections with add_heading. +# add("--asdf", 1, "This will have no heading") +# add_heading("foo") +# add("--foo", false, "This will have the foo heading") +# add("--another_foo", 1.5, "This too.") +# add_heading("This is after foo") +# add("--bar", true, "You probably get it by now.") +# +# If you include "[default]" in the description of a option, then the help will +# substitue it with the default value. +# +# ############################################################################## + + +#------------------------------------------------------------------------------- +# Holds all the properties of a command line option +# +# value will return the default when it has not been set. +#------------------------------------------------------------------------------- +class Option: + var _has_been_set = false + var _value = null + # REMEMBER that when this option is an array, you have to set the value + # before you alter the contents of the array (append etc) or has_been_set + # will return false and it might not be used right. For example + # get_value_or_null will return null when you've actually changed the value. + var value = _value: + get: + return _value + + set(val): + _has_been_set = true + _value = val + + var option_name = '' + var default = null + var description = '' + var required = false + + + func _init(name,default_value,desc=''): + option_name = name + default = default_value + description = desc + _value = default + + + func to_s(min_space=0): + var subbed_desc = description + subbed_desc = subbed_desc.replace('[default]', str(default)) + return str(option_name.rpad(min_space), ' ', subbed_desc) + + + func has_been_set(): + return _has_been_set + + + + +#------------------------------------------------------------------------------- +# A struct for organizing options by a heading +#------------------------------------------------------------------------------- +class OptionHeading: + var options = [] + var display = 'default' + + + + +#------------------------------------------------------------------------------- +# Organizes options by order, heading, position. Also responsible for all +# help related text generation. +#------------------------------------------------------------------------------- +class Options: + var options = [] + var positional = [] + var default_heading = OptionHeading.new() + var script_option = Option.new('-s', '?', 'script option provided by Godot') + + var _options_by_name = {} + var _options_by_heading = [default_heading] + var _cur_heading = default_heading + + + func add_heading(display): + var heading = OptionHeading.new() + heading.display = display + _cur_heading = heading + _options_by_heading.append(heading) + + + func add(option): + options.append(option) + _options_by_name[option.option_name] = option + _cur_heading.options.append(option) + + + func add_positional(option): + positional.append(option) + _options_by_name[option.option_name] = option + + + func get_by_name(option_name): + var found_param = null + if(option_name == script_option.option_name): + found_param = script_option + elif(_options_by_name.has(option_name)): + found_param = _options_by_name[option_name] + + return found_param + + + func get_help_text(): + var longest = 0 + var text = "" + for i in range(options.size()): + if(options[i].option_name.length() > longest): + longest = options[i].option_name.length() + + for heading in _options_by_heading: + if(heading != default_heading): + text += str("\n", heading.display, "\n") + for option in heading.options: + text += str(' ', option.to_s(longest + 2), "\n") + + + return text + + + func get_option_value_text(): + var text = "" + var i = 0 + for option in positional: + text += str(i, '. ', option.option_name, ' = ', option.value) + + if(!option.has_been_set()): + text += " (default)" + text += "\n" + i += 1 + + for option in options: + text += str(option.option_name, ' = ', option.value) + + if(!option.has_been_set()): + text += " (default)" + text += "\n" + return text + + + func print_option_values(): + print(get_option_value_text()) + + + func get_missing_required_options(): + var to_return = [] + for opt in options: + if(opt.required and !opt.has_been_set()): + to_return.append(opt) + + for opt in positional: + if(opt.required and !opt.has_been_set()): + to_return.append(opt) + + return to_return + + + func get_usage_text(): + var pos_text = "" + for opt in positional: + pos_text += str("[", opt.description, "] ") + + if(pos_text != ""): + pos_text += " [opts] " + + return " -s " + script_option.value + " [opts] " + pos_text + + + + +#------------------------------------------------------------------------------- +# +# optarse +# +#------------------------------------------------------------------------------- +var options = Options.new() +var banner = '' +var option_name_prefix = '-' +var unused = [] +var parsed_args = [] + +func _convert_value_to_array(raw_value): + var split = raw_value.split(',') + # This is what an empty set looks like from the command line. If we do + # not do this then we will always get back [''] which is not what it + # shoudl be. + if(split.size() == 1 and split[0] == ''): + split = [] + return split + + +# REMEMBER raw_value not used for bools. +func _set_option_value(option, raw_value): + var t = typeof(option.default) + # only set values that were specified at the command line so that + # we can punch through default and config values correctly later. + # Without this check, you can't tell the difference between the + # defaults and what was specified, so you can't punch through + # higher level options. + if(t == TYPE_INT): + option.value = int(raw_value) + elif(t == TYPE_STRING): + option.value = str(raw_value) + elif(t == TYPE_ARRAY): + var values = _convert_value_to_array(raw_value) + if(!option.has_been_set()): + option.value = [] + option.value.append_array(values) + elif(t == TYPE_BOOL): + option.value = !option.default + elif(t == TYPE_FLOAT): + option.value = float(raw_value) + elif(t == TYPE_NIL): + print(option.option_name + ' cannot be processed, it has a nil datatype') + else: + print(option.option_name + ' cannot be processed, it has unknown datatype:' + str(t)) + + +func _parse_command_line_arguments(args): + var parsed_opts = args.duplicate() + var i = 0 + var positional_index = 0 + + while i < parsed_opts.size(): + var opt = '' + var value = '' + var entry = parsed_opts[i] + + if(is_option(entry)): + if(entry.find('=') != -1): + var parts = entry.split('=') + opt = parts[0] + value = parts[1] + var the_option = options.get_by_name(opt) + if(the_option != null): + parsed_opts.remove_at(i) + _set_option_value(the_option, value) + else: + i += 1 + else: + var the_option = options.get_by_name(entry) + if(the_option != null): + parsed_opts.remove_at(i) + if(typeof(the_option.default) == TYPE_BOOL): + _set_option_value(the_option, null) + elif(i < parsed_opts.size() and !is_option(parsed_opts[i])): + value = parsed_opts[i] + parsed_opts.remove_at(i) + _set_option_value(the_option, value) + else: + i += 1 + else: + if(positional_index < options.positional.size()): + _set_option_value(options.positional[positional_index], entry) + parsed_opts.remove_at(i) + positional_index += 1 + else: + i += 1 + + # this is the leftovers that were not extracted. + return parsed_opts + + +func is_option(arg): + return arg.begins_with(option_name_prefix) + + +func add(op_name, default, desc): + var new_op = null + + if(options.get_by_name(op_name) != null): + push_error(str('Option [', op_name, '] already exists.')) + else: + new_op = Option.new(op_name, default, desc) + options.add(new_op) + + return new_op + + +func add_required(op_name, default, desc): + var op = add(op_name, default, desc) + if(op != null): + op.required = true + return op + + +func add_positional(op_name, default, desc): + var new_op = null + if(options.get_by_name(op_name) != null): + push_error(str('Positional option [', op_name, '] already exists.')) + else: + new_op = Option.new(op_name, default, desc) + options.add_positional(new_op) + return new_op + + +func add_positional_required(op_name, default, desc): + var op = add_positional(op_name, default, desc) + if(op != null): + op.required = true + return op + + +func add_heading(display_text): + options.add_heading(display_text) + + +func get_value(name): + var found_param = options.get_by_name(name) + + if(found_param != null): + return found_param.value + else: + print("COULD NOT FIND OPTION " + name) + return null + + +# This will return null instead of the default value if an option has not been +# specified. This can be useful when providing an order of precedence to your +# values. For example if +# default value < config file < command line +# then you do not want to get the default value for a command line option or it +# will overwrite the value in a config file. +func get_value_or_null(name): + var found_param = options.get_by_name(name) + + if(found_param != null and found_param.has_been_set()): + return found_param.value + else: + return null + + +func get_help(): + var sep = '---------------------------------------------------------' + + var text = str(sep, "\n", banner, "\n\n") + text += "Usage\n-----------\n" + text += " " + options.get_usage_text() + "\n\n" + text += "\nOptions\n-----------\n" + text += options.get_help_text() + text += str(sep, "\n") + return text + + +func print_help(): + print(get_help()) + + +func parse(cli_args=null): + parsed_args = cli_args + + if(parsed_args == null): + parsed_args = OS.get_cmdline_args() + parsed_args.append_array(OS.get_cmdline_user_args()) + + unused = _parse_command_line_arguments(parsed_args) + + +func get_missing_required_options(): + return options.get_missing_required_options() + + +# ############################################################################## +# The MIT License (MIT) +# ===================== +# +# Copyright (c) 2024 Tom "Butch" Wesley +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +# ############################################################################## \ No newline at end of file diff --git a/addons/gut/collected_script.gd b/addons/gut/collected_script.gd index 6f8f5eba..4542da9c 100644 --- a/addons/gut/collected_script.gd +++ b/addons/gut/collected_script.gd @@ -6,9 +6,8 @@ # # This class also facilitates all the exporting and importing of tests. # ------------------------------------------------------------------------------ -var CollectedTest = load('res://addons/gut/collected_test.gd') +var CollectedTest = GutUtils.CollectedTest -var _utils = null var _lgr = null # One entry per test found in the script. Added externally by TestCollector @@ -34,180 +33,174 @@ var was_run = false var name = '' : - get: return path - set(val):pass + get: return path + set(val):pass -func _init(utils=null,logger=null): - _utils = utils - _lgr = logger +func _init(logger=null): + _lgr = logger func get_new(): - return load_script().new() + return load_script().new() func load_script(): - var to_return = load(path) + var to_return = load(path) - if(inner_class_name != null and inner_class_name != ''): - # If we wanted to do inner classes in inner classses - # then this would have to become some kind of loop or recursive - # call to go all the way down the chain or this class would - # have to change to hold onto the loaded class instead of - # just path information. - to_return = to_return.get(inner_class_name) + if(inner_class_name != null and inner_class_name != ''): + # If we wanted to do inner classes in inner classses + # then this would have to become some kind of loop or recursive + # call to go all the way down the chain or this class would + # have to change to hold onto the loaded class instead of + # just path information. + to_return = to_return.get(inner_class_name) - return to_return + return to_return # script.gd.InnerClass func get_filename_and_inner(): - var to_return = get_filename() - if(inner_class_name != ''): - to_return += '.' + String(inner_class_name) - return to_return + var to_return = get_filename() + if(inner_class_name != ''): + to_return += '.' + String(inner_class_name) + return to_return # res://foo/bar.gd.FooBar func get_full_name(): - var to_return = path - if(inner_class_name != ''): - to_return += '.' + String(inner_class_name) - return to_return + var to_return = path + if(inner_class_name != ''): + to_return += '.' + String(inner_class_name) + return to_return func get_filename(): - return path.get_file() + return path.get_file() func has_inner_class(): - return inner_class_name != '' + return inner_class_name != '' # Note: although this no longer needs to export the inner_class names since # they are pulled from metadata now, it is easier to leave that in # so we don't have to cut the export down to unique script names. func export_to(config_file, section): - config_file.set_value(section, 'path', path) - config_file.set_value(section, 'inner_class', inner_class_name) - var names = [] - for i in range(tests.size()): - names.append(tests[i].name) - config_file.set_value(section, 'tests', names) + config_file.set_value(section, 'path', path) + config_file.set_value(section, 'inner_class', inner_class_name) + var names = [] + for i in range(tests.size()): + names.append(tests[i].name) + config_file.set_value(section, 'tests', names) func _remap_path(source_path): - var to_return = source_path - if(!_utils.file_exists(source_path)): - _lgr.debug('Checking for remap for: ' + source_path) - var remap_path = source_path.get_basename() + '.gd.remap' - if(_utils.file_exists(remap_path)): - var cf = ConfigFile.new() - cf.load(remap_path) - to_return = cf.get_value('remap', 'path') - else: - _lgr.warn('Could not find remap file ' + remap_path) - return to_return + var to_return = source_path + if(!FileAccess.file_exists(source_path)): + _lgr.debug('Checking for remap for: ' + source_path) + var remap_path = source_path.get_basename() + '.gd.remap' + if(FileAccess.file_exists(remap_path)): + var cf = ConfigFile.new() + cf.load(remap_path) + to_return = cf.get_value('remap', 'path') + else: + _lgr.warn('Could not find remap file ' + remap_path) + return to_return func import_from(config_file, section): - path = config_file.get_value(section, 'path') - path = _remap_path(path) - # Null is an acceptable value, but you can't pass null as a default to - # get_value since it thinks you didn't send a default...then it spits - # out red text. This works around that. - var inner_name = config_file.get_value(section, 'inner_class', 'Placeholder') - if(inner_name != 'Placeholder'): - inner_class_name = inner_name - else: # just being explicit - inner_class_name = StringName("") + path = config_file.get_value(section, 'path') + path = _remap_path(path) + # Null is an acceptable value, but you can't pass null as a default to + # get_value since it thinks you didn't send a default...then it spits + # out red text. This works around that. + var inner_name = config_file.get_value(section, 'inner_class', 'Placeholder') + if(inner_name != 'Placeholder'): + inner_class_name = inner_name + else: # just being explicit + inner_class_name = StringName("") -func get_test_named(name): - return _utils.search_array(tests, 'name', name) - - -func mark_tests_to_skip_with_suffix(suffix): - for single_test in tests: - single_test.should_skip = single_test.name.ends_with(suffix) +func get_test_named(test_name): + return GutUtils.search_array(tests, 'name', test_name) func get_ran_test_count(): - var count = 0 - for t in tests: - if(t.was_run): - count += 1 - return count + var count = 0 + for t in tests: + if(t.was_run): + count += 1 + return count func get_assert_count(): - var count = 0 - for t in tests: - count += t.pass_texts.size() - count += t.fail_texts.size() - for t in setup_teardown_tests: - count += t.pass_texts.size() - count += t.fail_texts.size() - return count + var count = 0 + for t in tests: + count += t.pass_texts.size() + count += t.fail_texts.size() + for t in setup_teardown_tests: + count += t.pass_texts.size() + count += t.fail_texts.size() + return count func get_pass_count(): - var count = 0 - for t in tests: - count += t.pass_texts.size() - for t in setup_teardown_tests: - count += t.pass_texts.size() - return count + var count = 0 + for t in tests: + count += t.pass_texts.size() + for t in setup_teardown_tests: + count += t.pass_texts.size() + return count func get_fail_count(): - var count = 0 - for t in tests: - count += t.fail_texts.size() - for t in setup_teardown_tests: - count += t.fail_texts.size() - return count + var count = 0 + for t in tests: + count += t.fail_texts.size() + for t in setup_teardown_tests: + count += t.fail_texts.size() + return count func get_pending_count(): - var count = 0 - for t in tests: - count += t.pending_texts.size() - return count + var count = 0 + for t in tests: + count += t.pending_texts.size() + return count func get_passing_test_count(): - var count = 0 - for t in tests: - if(t.is_passing()): - count += 1 - return count + var count = 0 + for t in tests: + if(t.is_passing()): + count += 1 + return count func get_failing_test_count(): - var count = 0 - for t in tests: - if(t.is_failing()): - count += 1 - return count + var count = 0 + for t in tests: + if(t.is_failing()): + count += 1 + return count func get_risky_count(): - var count = 0 - if(was_skipped): - count = 1 - else: - for t in tests: - if(t.is_risky()): - count += 1 - return count + var count = 0 + if(was_skipped): + count = 1 + else: + for t in tests: + if(t.is_risky()): + count += 1 + return count func to_s(): - var to_return = path - if(inner_class_name != null): - to_return += str('.', inner_class_name) - to_return += "\n" - for i in range(tests.size()): - to_return += str(' ', tests[i].to_s()) - return to_return + var to_return = path + if(inner_class_name != null): + to_return += str('.', inner_class_name) + to_return += "\n" + for i in range(tests.size()): + to_return += str(' ', tests[i].to_s()) + return to_return diff --git a/addons/gut/collected_test.gd b/addons/gut/collected_test.gd index 32a54b0d..6302355e 100644 --- a/addons/gut/collected_test.gd +++ b/addons/gut/collected_test.gd @@ -10,25 +10,28 @@ var has_printed_name = false # the number of arguments the method has var arg_count = 0 +# the time it took to execute the test in seconds +var time_taken : float = 0 + # The number of asserts in the test. Converted to a property for backwards # compatibility. This now reflects the text sizes instead of being a value # that can be altered externally. var assert_count = 0 : - get: return pass_texts.size() + fail_texts.size() - set(val): pass + get: return pass_texts.size() + fail_texts.size() + set(val): pass # Converted to propety for backwards compatibility. This now cannot be set # externally var pending = false : - get: return is_pending() - set(val): pass + get: return is_pending() + set(val): pass # the line number when the test fails var line_number = -1 # Set internally by Gut using whatever reason Gut wants to use to set this. # Gut will skip these marked true and the test will be listed as risky. -var should_skip = false +var should_skip = false # -- Currently not used by GUT don't believe ^ var pass_texts = [] var fail_texts = [] @@ -39,77 +42,77 @@ var was_run = false func did_pass(): - return is_passing() + return is_passing() func add_fail(fail_text): - fail_texts.append(fail_text) + fail_texts.append(fail_text) func add_pending(pending_text): - pending_texts.append(pending_text) + pending_texts.append(pending_text) func add_pass(passing_text): - pass_texts.append(passing_text) + pass_texts.append(passing_text) # must have passed an assert and not have any other status to be passing func is_passing(): - return pass_texts.size() > 0 and fail_texts.size() == 0 and pending_texts.size() == 0 + return pass_texts.size() > 0 and fail_texts.size() == 0 and pending_texts.size() == 0 # failing takes precedence over everything else, so any failures makes the # test a failure. func is_failing(): - return fail_texts.size() > 0 + return fail_texts.size() > 0 # test is only pending if pending was called and the test is not failing. func is_pending(): - return pending_texts.size() > 0 and fail_texts.size() == 0 + return pending_texts.size() > 0 and fail_texts.size() == 0 func is_risky(): - return should_skip or (was_run and !did_something()) + return should_skip or (was_run and !did_something()) func did_something(): - return is_passing() or is_failing() or is_pending() + return is_passing() or is_failing() or is_pending() func get_status_text(): - var to_return = GutUtils.TEST_STATUSES.NO_ASSERTS + var to_return = GutUtils.TEST_STATUSES.NO_ASSERTS - if(should_skip): - to_return = GutUtils.TEST_STATUSES.SKIPPED - elif(!was_run): - to_return = GutUtils.TEST_STATUSES.NOT_RUN - elif(pending_texts.size() > 0): - to_return = GutUtils.TEST_STATUSES.PENDING - elif(fail_texts.size() > 0): - to_return = GutUtils.TEST_STATUSES.FAILED - elif(pass_texts.size() > 0): - to_return = GutUtils.TEST_STATUSES.PASSED + if(should_skip): + to_return = GutUtils.TEST_STATUSES.SKIPPED + elif(!was_run): + to_return = GutUtils.TEST_STATUSES.NOT_RUN + elif(pending_texts.size() > 0): + to_return = GutUtils.TEST_STATUSES.PENDING + elif(fail_texts.size() > 0): + to_return = GutUtils.TEST_STATUSES.FAILED + elif(pass_texts.size() > 0): + to_return = GutUtils.TEST_STATUSES.PASSED - return to_return + return to_return # Deprecated func get_status(): - return get_status_text() + return get_status_text() func to_s(): - var pad = ' ' - var to_return = str(name, "[", get_status_text(), "]\n") - - for i in range(fail_texts.size()): - to_return += str(pad, 'Fail: ', fail_texts[i]) - for i in range(pending_texts.size()): - to_return += str(pad, 'Pending: ', pending_texts[i], "\n") - for i in range(pass_texts.size()): - to_return += str(pad, 'Pass: ', pass_texts[i], "\n") - return to_return + var pad = ' ' + var to_return = str(name, "[", get_status_text(), "]\n") + + for i in range(fail_texts.size()): + to_return += str(pad, 'Fail: ', fail_texts[i]) + for i in range(pending_texts.size()): + to_return += str(pad, 'Pending: ', pending_texts[i], "\n") + for i in range(pass_texts.size()): + to_return += str(pad, 'Pass: ', pass_texts[i], "\n") + return to_return diff --git a/addons/gut/comparator.gd b/addons/gut/comparator.gd index 48776c41..8510d67f 100644 --- a/addons/gut/comparator.gd +++ b/addons/gut/comparator.gd @@ -1,17 +1,19 @@ -var _utils = load('res://addons/gut/utils.gd').get_instance() -var _strutils = _utils.Strutils.new() +var _strutils = GutUtils.Strutils.new() var _max_length = 100 var _should_compare_int_to_float = true const MISSING = '|__missing__gut__compare__value__|' + func _cannot_compare_text(v1, v2): return str('Cannot compare ', _strutils.types[typeof(v1)], ' with ', _strutils.types[typeof(v2)], '.') + func _make_missing_string(text): return '' + func _create_missing_result(v1, v2, text): var to_return = null var v1_str = format_value(v1) @@ -19,10 +21,10 @@ func _create_missing_result(v1, v2, text): if(typeof(v1) == TYPE_STRING and v1 == MISSING): v1_str = _make_missing_string(text) - to_return = _utils.CompareResult.new() + to_return = GutUtils.CompareResult.new() elif(typeof(v2) == TYPE_STRING and v2 == MISSING): v2_str = _make_missing_string(text) - to_return = _utils.CompareResult.new() + to_return = GutUtils.CompareResult.new() if(to_return != null): to_return.summary = str(v1_str, ' != ', v2_str) @@ -36,7 +38,7 @@ func simple(v1, v2, missing_string=''): if(missing_result != null): return missing_result - var result = _utils.CompareResult.new() + var result = GutUtils.CompareResult.new() var cmp_str = null var extra = '' @@ -48,11 +50,11 @@ func simple(v1, v2, missing_string=''): result.are_equal = v1 == v2 elif([TYPE_STRING, TYPE_STRING_NAME].has(tv1) and [TYPE_STRING, TYPE_STRING_NAME].has(tv2)): result.are_equal = v1 == v2 - elif(_utils.are_datatypes_same(v1, v2)): + elif(GutUtils.are_datatypes_same(v1, v2)): result.are_equal = v1 == v2 if(typeof(v1) == TYPE_DICTIONARY or typeof(v1) == TYPE_ARRAY): - var sub_result = _utils.DiffTool.new(v1, v2, _utils.DIFF.DEEP) + var sub_result = GutUtils.DiffTool.new(v1, v2, GutUtils.DIFF.DEEP) result.summary = sub_result.get_short_summary() if(!sub_result.are_equal): extra = ".\n" + sub_result.get_short_summary() @@ -69,9 +71,9 @@ func simple(v1, v2, missing_string=''): func shallow(v1, v2): var result = null - if(_utils.are_datatypes_same(v1, v2)): + if(GutUtils.are_datatypes_same(v1, v2)): if(typeof(v1) in [TYPE_ARRAY, TYPE_DICTIONARY]): - result = _utils.DiffTool.new(v1, v2, _utils.DIFF.DEEP) + result = GutUtils.DiffTool.new(v1, v2, GutUtils.DIFF.DEEP) else: result = simple(v1, v2) else: @@ -83,9 +85,9 @@ func shallow(v1, v2): func deep(v1, v2): var result = null - if(_utils.are_datatypes_same(v1, v2)): + if(GutUtils.are_datatypes_same(v1, v2)): if(typeof(v1) in [TYPE_ARRAY, TYPE_DICTIONARY]): - result = _utils.DiffTool.new(v1, v2, _utils.DIFF.DEEP) + result = GutUtils.DiffTool.new(v1, v2, GutUtils.DIFF.DEEP) else: result = simple(v1, v2) else: @@ -98,11 +100,11 @@ func format_value(val, max_val_length=_max_length): return _strutils.truncate_string(_strutils.type2str(val), max_val_length) -func compare(v1, v2, diff_type=_utils.DIFF.SIMPLE): +func compare(v1, v2, diff_type=GutUtils.DIFF.SIMPLE): var result = null - if(diff_type == _utils.DIFF.SIMPLE): + if(diff_type == GutUtils.DIFF.SIMPLE): result = simple(v1, v2) - elif(diff_type == _utils.DIFF.DEEP): + elif(diff_type == GutUtils.DIFF.DEEP): result = deep(v1, v2) return result diff --git a/addons/gut/diff_formatter.gd b/addons/gut/diff_formatter.gd index fd954aff..05f898f6 100644 --- a/addons/gut/diff_formatter.gd +++ b/addons/gut/diff_formatter.gd @@ -1,5 +1,4 @@ -var _utils = load('res://addons/gut/utils.gd').get_instance() -var _strutils = _utils.Strutils.new() +var _strutils = GutUtils.Strutils.new() const INDENT = ' ' var _max_to_display = 30 const ABSOLUTE_MAX_DISPLAYED = 10000 diff --git a/addons/gut/diff_tool.gd b/addons/gut/diff_tool.gd index bc33a902..26fcfc46 100644 --- a/addons/gut/diff_tool.gd +++ b/addons/gut/diff_tool.gd @@ -5,9 +5,8 @@ enum { SIMPLE } -var _utils = load('res://addons/gut/utils.gd').get_instance() -var _strutils = _utils.Strutils.new() -var _compare = _utils.Comparator.new() +var _strutils = GutUtils.Strutils.new() +var _compare = GutUtils.Comparator.new() var DiffTool = load('res://addons/gut/diff_tool.gd') var _value_1 = null @@ -69,7 +68,7 @@ func _init(v1,v2,diff_type=DEEP): func _find_differences(v1, v2): - if(_utils.are_datatypes_same(v1, v2)): + if(GutUtils.are_datatypes_same(v1, v2)): if(typeof(v1) == TYPE_ARRAY): _brackets = {'open':'[', 'close':']'} _desc_things = 'indexes' @@ -80,10 +79,10 @@ func _find_differences(v1, v2): _diff_dictionary(v1, v2) else: _invalidate() - _utils.get_logger().error('Only Arrays and Dictionaries are supported.') + GutUtils.get_logger().error('Only Arrays and Dictionaries are supported.') else: _invalidate() - _utils.get_logger().error('Only Arrays and Dictionaries are supported.') + GutUtils.get_logger().error('Only Arrays and Dictionaries are supported.') func _diff_array(a1, a2): diff --git a/addons/gut/double_templates/function_template.txt b/addons/gut/double_templates/function_template.txt index dc41248d..a58b956f 100644 --- a/addons/gut/double_templates/function_template.txt +++ b/addons/gut/double_templates/function_template.txt @@ -1,7 +1,6 @@ {func_decleration} {vararg_warning}__gutdbl.spy_on('{method_name}', {param_array}) - if(__gutdbl.should_call_super('{method_name}', {param_array})): + if(__gutdbl.is_stubbed_to_call_super('{method_name}', {param_array})): return {super_call} else: - return __gutdbl.get_stubbed_return('{method_name}', {param_array}) - + return await __gutdbl.handle_other_stubs('{method_name}', {param_array}) diff --git a/addons/gut/double_tools.gd b/addons/gut/double_tools.gd index 708f9b04..186d432c 100644 --- a/addons/gut/double_tools.gd +++ b/addons/gut/double_tools.gd @@ -23,6 +23,14 @@ func _init(values=null): gut.get_autofree().add_free(double) +func _get_stubbed_method_to_call(method_name, called_with): + var method = stubber.get_call_this(double, method_name, called_with) + if(method != null): + method = method.bindv(called_with) + return method + return method + + func from_id(inst_id): if(inst_id == -1): return null @@ -30,25 +38,29 @@ func from_id(inst_id): return instance_from_id(inst_id) -func should_call_super(method_name, called_with): +func is_stubbed_to_call_super(method_name, called_with): if(stubber != null): return stubber.should_call_super(double, method_name, called_with) else: return false +func handle_other_stubs(method_name, called_with): + if(stubber == null): + return + + var method = _get_stubbed_method_to_call(method_name, called_with) + if(method != null): + return await method.call() + else: + return stubber.get_return(double, method_name, called_with) + + func spy_on(method_name, called_with): if(spy != null): spy.add_call(double, method_name, called_with) -func get_stubbed_return(method_name, called_with): - if(stubber != null): - return stubber.get_return(double, method_name, called_with) - else: - return null - - func default_val(method_name, p_index, default_val=NO_DEFAULT_VALUE): if(stubber != null): return stubber.get_default_value(double, method_name, p_index) @@ -62,4 +74,4 @@ func vararg_warning(): "This method contains a vararg argument and the paramter count was not stubbed. " + \ "GUT adds extra parameters to this method which should fill most needs. " + \ "It is recommended that you stub param_count for this object's class to ensure " + \ - "that there are not any parameter count mismatch errors.") \ No newline at end of file + "that there are not any parameter count mismatch errors.") diff --git a/addons/gut/doubler.gd b/addons/gut/doubler.gd index ec9c5241..4fb5f01d 100644 --- a/addons/gut/doubler.gd +++ b/addons/gut/doubler.gd @@ -11,6 +11,7 @@ class PackedSceneDouble: func set_script_obj(obj): _script = obj + @warning_ignore("native_method_override") func instantiate(edit_state=0): var inst = _scene.instantiate(edit_state) var export_props = [] @@ -39,23 +40,22 @@ class PackedSceneDouble: # ------------------------------------------------------------------------------ # START Doubler # ------------------------------------------------------------------------------ -var _utils = load('res://addons/gut/utils.gd').get_instance() -var _base_script_text = _utils.get_file_as_text('res://addons/gut/double_templates/script_template.txt') -var _script_collector = _utils.ScriptCollector.new() +var _base_script_text = GutUtils.get_file_as_text('res://addons/gut/double_templates/script_template.txt') +var _script_collector = GutUtils.ScriptCollector.new() # used by tests for debugging purposes. var print_source = false -var inner_class_registry = _utils.InnerClassRegistry.new() +var inner_class_registry = GutUtils.InnerClassRegistry.new() # ############### # Properties # ############### -var _stubber = _utils.Stubber.new() +var _stubber = GutUtils.Stubber.new() func get_stubber(): return _stubber func set_stubber(stubber): _stubber = stubber -var _lgr = _utils.get_logger() +var _lgr = GutUtils.get_logger() func get_logger(): return _lgr func set_logger(logger): @@ -84,19 +84,19 @@ func set_strategy(strategy): _lgr.error(str('doubler.gd: invalid double strategy ', strategy)) -var _method_maker = _utils.MethodMaker.new() +var _method_maker = GutUtils.MethodMaker.new() func get_method_maker(): return _method_maker -var _ignored_methods = _utils.OneToMany.new() +var _ignored_methods = GutUtils.OneToMany.new() func get_ignored_methods(): return _ignored_methods # ############### # Private # ############### -func _init(strategy=_utils.DOUBLE_STRATEGY.SCRIPT_ONLY): - set_logger(_utils.get_logger()) +func _init(strategy=GutUtils.DOUBLE_STRATEGY.SCRIPT_ONLY): + set_logger(GutUtils.get_logger()) _strategy = strategy @@ -111,7 +111,7 @@ func _stub_to_call_super(parsed, method_name): if(!parsed.get_method(method_name).is_eligible_for_doubling()): return - var params = _utils.StubParams.new(parsed.script_path, method_name, parsed.subpath) + var params = GutUtils.StubParams.new(parsed.script_path, method_name, parsed.subpath) params.to_call_super() _stubber.add_stub(params) @@ -170,7 +170,7 @@ func _create_script_no_warnings(src): prev_native_override_value = ProjectSettings.get_setting(native_method_override) ProjectSettings.set_setting(native_method_override, 0) - var DblClass = _utils.create_script_from_source(src) + var DblClass = GutUtils.create_script_from_source(src) ProjectSettings.set_setting(native_method_override, prev_native_override_value) return DblClass @@ -192,7 +192,7 @@ func _create_double(parsed, strategy, override_path, partial): else: dbl_src += _get_func_text(method.meta, path) - if(strategy == _utils.DOUBLE_STRATEGY.INCLUDE_NATIVE): + if(strategy == GutUtils.DOUBLE_STRATEGY.INCLUDE_NATIVE): for method in parsed.get_super_methods(): if(_is_method_eligible_for_doubling(parsed, method)): included_methods.append(method.meta.name) @@ -207,7 +207,7 @@ func _create_double(parsed, strategy, override_path, partial): if(print_source): - print(_utils.add_line_numbers(dbl_src)) + print(GutUtils.add_line_numbers(dbl_src)) var DblClass = _create_script_no_warnings(dbl_src) if(_stubber != null): @@ -218,7 +218,7 @@ func _create_double(parsed, strategy, override_path, partial): func _stub_method_default_values(which, parsed, strategy): for method in parsed.get_local_methods(): - if(method.is_eligible_for_doubling() && !_ignored_methods.has(parsed.resource, method.meta.name)): + if(method.is_eligible_for_doubling() and !_ignored_methods.has(parsed.resource, method.meta.name)): _stubber.stub_defaults_from_meta(parsed.script_path, method.meta) @@ -259,7 +259,7 @@ func _get_func_text(method_hash, path): func _parse_script(obj): var parsed = null - if(_utils.is_inner_class(obj)): + if(GutUtils.is_inner_class(obj)): if(inner_class_registry.has(obj)): parsed = _script_collector.parse(inner_class_registry.get_base_resource(obj), obj) else: @@ -304,10 +304,10 @@ func partial_double_scene(scene, strategy=_strategy): func double_gdnative(which): - return _double(which, _utils.DOUBLE_STRATEGY.INCLUDE_NATIVE) + return _double(which, GutUtils.DOUBLE_STRATEGY.INCLUDE_NATIVE) func partial_double_gdnative(which): - return _partial_double(which, _utils.DOUBLE_STRATEGY.INCLUDE_NATIVE) + return _partial_double(which, GutUtils.DOUBLE_STRATEGY.INCLUDE_NATIVE) func double_inner(parent, inner, strategy=_strategy): diff --git a/addons/gut/dynamic_gdscript.gd b/addons/gut/dynamic_gdscript.gd new file mode 100644 index 00000000..e3e19462 --- /dev/null +++ b/addons/gut/dynamic_gdscript.gd @@ -0,0 +1,29 @@ +@tool +var default_script_name_no_extension = 'gut_dynamic_script' +var default_script_resource_path = 'res://addons/gut/not_a_real_file/' + +var _created_script_count = 0 + + +# Creates a loaded script from the passed in source. This loaded script is +# returned unless there is an error. When an error occcurs the error number +# is returned instead. +func create_script_from_source(source, override_path=null): + _created_script_count += 1 + var r_path = str(default_script_resource_path, default_script_name_no_extension, '_', _created_script_count) + if(override_path != null): + r_path = override_path + + var DynamicScript = GDScript.new() + DynamicScript.source_code = source.dedent() + # The resource_path must be unique or Godot thinks it is trying + # to load something it has already loaded and generates an error like + # ERROR: Another resource is loaded from path 'workaround for godot + # issue #65263' (possible cyclic resource inclusion). + DynamicScript.resource_path = r_path + var result = DynamicScript.reload() + if(result != OK): + DynamicScript = result + + return DynamicScript + diff --git a/addons/gut/fonts/AnonymousPro-Bold.ttf.import b/addons/gut/fonts/AnonymousPro-Bold.ttf.import index de1351f6..a3eb4791 100644 --- a/addons/gut/fonts/AnonymousPro-Bold.ttf.import +++ b/addons/gut/fonts/AnonymousPro-Bold.ttf.import @@ -15,7 +15,6 @@ dest_files=["res://.godot/imported/AnonymousPro-Bold.ttf-9d8fef4d357af5b52cd60af Rendering=null antialiasing=1 generate_mipmaps=false -disable_embedded_bitmaps=true multichannel_signed_distance_field=false msdf_pixel_range=8 msdf_size=48 diff --git a/addons/gut/fonts/AnonymousPro-BoldItalic.ttf.import b/addons/gut/fonts/AnonymousPro-BoldItalic.ttf.import index bdde2072..ef28dd80 100644 --- a/addons/gut/fonts/AnonymousPro-BoldItalic.ttf.import +++ b/addons/gut/fonts/AnonymousPro-BoldItalic.ttf.import @@ -15,7 +15,6 @@ dest_files=["res://.godot/imported/AnonymousPro-BoldItalic.ttf-4274bf704d3d6b9cd Rendering=null antialiasing=1 generate_mipmaps=false -disable_embedded_bitmaps=true multichannel_signed_distance_field=false msdf_pixel_range=8 msdf_size=48 diff --git a/addons/gut/fonts/AnonymousPro-Italic.ttf.import b/addons/gut/fonts/AnonymousPro-Italic.ttf.import index ce3e5b91..1779af17 100644 --- a/addons/gut/fonts/AnonymousPro-Italic.ttf.import +++ b/addons/gut/fonts/AnonymousPro-Italic.ttf.import @@ -15,7 +15,6 @@ dest_files=["res://.godot/imported/AnonymousPro-Italic.ttf-9989590b02137b799e13d Rendering=null antialiasing=1 generate_mipmaps=false -disable_embedded_bitmaps=true multichannel_signed_distance_field=false msdf_pixel_range=8 msdf_size=48 diff --git a/addons/gut/fonts/AnonymousPro-Regular.ttf.import b/addons/gut/fonts/AnonymousPro-Regular.ttf.import index a567498c..1e2975b1 100644 --- a/addons/gut/fonts/AnonymousPro-Regular.ttf.import +++ b/addons/gut/fonts/AnonymousPro-Regular.ttf.import @@ -15,7 +15,6 @@ dest_files=["res://.godot/imported/AnonymousPro-Regular.ttf-856c843fd6f89964d2ca Rendering=null antialiasing=1 generate_mipmaps=false -disable_embedded_bitmaps=true multichannel_signed_distance_field=false msdf_pixel_range=8 msdf_size=48 diff --git a/addons/gut/fonts/CourierPrime-Bold.ttf.import b/addons/gut/fonts/CourierPrime-Bold.ttf.import index cb05171d..7d60fb0a 100644 --- a/addons/gut/fonts/CourierPrime-Bold.ttf.import +++ b/addons/gut/fonts/CourierPrime-Bold.ttf.import @@ -15,7 +15,6 @@ dest_files=["res://.godot/imported/CourierPrime-Bold.ttf-1f003c66d63ebed70964e77 Rendering=null antialiasing=1 generate_mipmaps=false -disable_embedded_bitmaps=true multichannel_signed_distance_field=false msdf_pixel_range=8 msdf_size=48 diff --git a/addons/gut/fonts/CourierPrime-BoldItalic.ttf.import b/addons/gut/fonts/CourierPrime-BoldItalic.ttf.import index 0a9a7b77..4678c9eb 100644 --- a/addons/gut/fonts/CourierPrime-BoldItalic.ttf.import +++ b/addons/gut/fonts/CourierPrime-BoldItalic.ttf.import @@ -15,7 +15,6 @@ dest_files=["res://.godot/imported/CourierPrime-BoldItalic.ttf-65ebcc61dd5e1dfa8 Rendering=null antialiasing=1 generate_mipmaps=false -disable_embedded_bitmaps=true multichannel_signed_distance_field=false msdf_pixel_range=8 msdf_size=48 diff --git a/addons/gut/fonts/CourierPrime-Italic.ttf.import b/addons/gut/fonts/CourierPrime-Italic.ttf.import index 89412fc9..522e2950 100644 --- a/addons/gut/fonts/CourierPrime-Italic.ttf.import +++ b/addons/gut/fonts/CourierPrime-Italic.ttf.import @@ -15,7 +15,6 @@ dest_files=["res://.godot/imported/CourierPrime-Italic.ttf-baa9156a73770735a0f72 Rendering=null antialiasing=1 generate_mipmaps=false -disable_embedded_bitmaps=true multichannel_signed_distance_field=false msdf_pixel_range=8 msdf_size=48 diff --git a/addons/gut/fonts/CourierPrime-Regular.ttf.import b/addons/gut/fonts/CourierPrime-Regular.ttf.import index 9fde40b1..38174660 100644 --- a/addons/gut/fonts/CourierPrime-Regular.ttf.import +++ b/addons/gut/fonts/CourierPrime-Regular.ttf.import @@ -15,7 +15,6 @@ dest_files=["res://.godot/imported/CourierPrime-Regular.ttf-3babe7e4a7a588dfc9a8 Rendering=null antialiasing=1 generate_mipmaps=false -disable_embedded_bitmaps=true multichannel_signed_distance_field=false msdf_pixel_range=8 msdf_size=48 diff --git a/addons/gut/fonts/LobsterTwo-Bold.ttf.import b/addons/gut/fonts/LobsterTwo-Bold.ttf.import index 673d1515..7548ad04 100644 --- a/addons/gut/fonts/LobsterTwo-Bold.ttf.import +++ b/addons/gut/fonts/LobsterTwo-Bold.ttf.import @@ -15,7 +15,6 @@ dest_files=["res://.godot/imported/LobsterTwo-Bold.ttf-7c7f734103b58a32491a47881 Rendering=null antialiasing=1 generate_mipmaps=false -disable_embedded_bitmaps=true multichannel_signed_distance_field=false msdf_pixel_range=8 msdf_size=48 diff --git a/addons/gut/fonts/LobsterTwo-BoldItalic.ttf.import b/addons/gut/fonts/LobsterTwo-BoldItalic.ttf.import index 62048b0e..4b609e80 100644 --- a/addons/gut/fonts/LobsterTwo-BoldItalic.ttf.import +++ b/addons/gut/fonts/LobsterTwo-BoldItalic.ttf.import @@ -15,7 +15,6 @@ dest_files=["res://.godot/imported/LobsterTwo-BoldItalic.ttf-227406a33e84448e6aa Rendering=null antialiasing=1 generate_mipmaps=false -disable_embedded_bitmaps=true multichannel_signed_distance_field=false msdf_pixel_range=8 msdf_size=48 diff --git a/addons/gut/fonts/LobsterTwo-Italic.ttf.import b/addons/gut/fonts/LobsterTwo-Italic.ttf.import index d3ca2728..5899b797 100644 --- a/addons/gut/fonts/LobsterTwo-Italic.ttf.import +++ b/addons/gut/fonts/LobsterTwo-Italic.ttf.import @@ -15,7 +15,6 @@ dest_files=["res://.godot/imported/LobsterTwo-Italic.ttf-f93abf6c25390c85ad5fb6c Rendering=null antialiasing=1 generate_mipmaps=false -disable_embedded_bitmaps=true multichannel_signed_distance_field=false msdf_pixel_range=8 msdf_size=48 diff --git a/addons/gut/fonts/LobsterTwo-Regular.ttf.import b/addons/gut/fonts/LobsterTwo-Regular.ttf.import index 9cc75421..45a12c8a 100644 --- a/addons/gut/fonts/LobsterTwo-Regular.ttf.import +++ b/addons/gut/fonts/LobsterTwo-Regular.ttf.import @@ -15,7 +15,6 @@ dest_files=["res://.godot/imported/LobsterTwo-Regular.ttf-f3fcfa01cd671c8da433dd Rendering=null antialiasing=1 generate_mipmaps=false -disable_embedded_bitmaps=true multichannel_signed_distance_field=false msdf_pixel_range=8 msdf_size=48 diff --git a/addons/gut/gui/GutControl.gd b/addons/gut/gui/GutControl.gd index c7575f9e..395e4355 100644 --- a/addons/gut/gui/GutControl.gd +++ b/addons/gut/gui/GutControl.gd @@ -55,9 +55,8 @@ func _ready(): _gut_runner.ran_from_editor = false add_child(_gut_runner) - # Becuase of the janky _utils psuedo-global script, we cannot do all this - # in _ready. If we do this in _ready, it generates a bunch of errors. - # The errors don't matter, but it looks bad. + # TODO This might not need to be called deferred after changing GutUtils to + # an all static class. call_deferred('_post_ready') diff --git a/addons/gut/gui/GutRunner.gd b/addons/gut/gui/GutRunner.gd index 7efb9960..3b22bded 100644 --- a/addons/gut/gui/GutRunner.gd +++ b/addons/gut/gui/GutRunner.gd @@ -1,10 +1,13 @@ # ############################################################################## -# This class joins together GUT, GUT Gui, GutConfig and is the main way to -# run a test suite. +# This class joins together GUT, GUT Gui, GutConfig and is THE way to kick off a +# run of a test suite. +# +# This creates its own instance of gut.gd that it manages. You can set the +# gut.gd instance if you need to for testing. +# +# Set gut_config to an instance of a configured gut_config.gd instance prior to +# running tests. # -# This creates its own instance of gut.gd that it manages. -# Use set_gut_config to set the gut_config.gd that should be used to configure -# gut. # This will create a GUI and wire it up and apply gut_config.gd options. # # Running tests: @@ -15,6 +18,9 @@ # ############################################################################## extends Node2D +const EXIT_OK = 0 +const EXIT_ERROR = 1 + var Gut = load('res://addons/gut/gut.gd') var ResultExporter = load('res://addons/gut/result_exporter.gd') var GutConfig = load('res://addons/gut/gut_config.gd') @@ -23,8 +29,18 @@ var runner_json_path = null var result_bbcode_path = null var result_json_path = null -var _gut_config = null -var _gut = null; +var lgr = GutUtils.get_logger() +var gut_config = null + +var _hid_gut = null; +# Lazy loaded gut instance. Settable for testing purposes. +var gut = _hid_gut : + get: + if(_hid_gut == null): + _hid_gut = Gut.new() + return _hid_gut + set(val): + _hid_gut = val var _wrote_results = false # The editor runs this scene using play_custom_scene, which means we cannot @@ -38,37 +54,45 @@ var ran_from_editor = true func _ready(): + GutUtils.WarningsManager.apply_warnings_dictionary( + GutUtils.warnings_at_start) + GutUtils.LazyLoader.load_all() + # When used from the panel we have to kick off the tests ourselves b/c # there's no way I know of to interact with the scene that was run via # play_custom_scene. if(ran_from_editor): - var GutEditorGlobals = load('res://addons/gut/gui/editor_globals.gd') - runner_json_path = GutUtils.nvl(runner_json_path, GutEditorGlobals.editor_run_gut_config_path) - result_bbcode_path = GutUtils.nvl(result_bbcode_path, GutEditorGlobals.editor_run_bbcode_results_path) - result_json_path = GutUtils.nvl(result_json_path, GutEditorGlobals.editor_run_json_results_path) + _run_from_editor() + + +func _exit_tree(): + if(!_wrote_results and ran_from_editor): + _write_results_for_gut_panel() - if(_gut_config == null): - _gut_config = GutConfig.new() - _gut_config.load_options(runner_json_path) - call_deferred('run_tests') +func _run_from_editor(): + var GutEditorGlobals = load('res://addons/gut/gui/editor_globals.gd') + runner_json_path = GutUtils.nvl(runner_json_path, GutEditorGlobals.editor_run_gut_config_path) + result_bbcode_path = GutUtils.nvl(result_bbcode_path, GutEditorGlobals.editor_run_bbcode_results_path) + result_json_path = GutUtils.nvl(result_json_path, GutEditorGlobals.editor_run_json_results_path) + if(gut_config == null): + gut_config = GutConfig.new() + gut_config.load_options(runner_json_path) -func _lazy_make_gut(): - if(_gut == null): - _gut = Gut.new() + call_deferred('run_tests') func _setup_gui(show_gui): if(show_gui): - _gui.gut = _gut - var printer = _gut.logger.get_printer('gui') + _gui.gut = gut + var printer = gut.logger.get_printer('gui') printer.set_textbox(_gui.get_textbox()) else: - _gut.logger.disable_printer('gui', true) + gut.logger.disable_printer('gui', true) _gui.visible = false - var opts = _gut_config.options + var opts = gut_config.options _gui.set_font_size(opts.font_size) _gui.set_font(opts.font_name) if(opts.font_color != null and opts.font_color.is_valid_html_color()): @@ -80,7 +104,7 @@ func _setup_gui(show_gui): _gui.use_compact_mode(opts.compact_mode) -func _write_results(): +func _write_results_for_gut_panel(): var content = _gui.get_textbox().get_parsed_text() #_gut.logger.get_gui_bbcode() var f = FileAccess.open(result_bbcode_path, FileAccess.WRITE) if(f != null): @@ -90,55 +114,107 @@ func _write_results(): push_error('Could not save bbcode, result = ', FileAccess.get_open_error()) var exporter = ResultExporter.new() - var f_result = exporter.write_json_file(_gut, result_json_path) + # TODO this should be checked and _wrote_results should maybe not be set, or + # maybe we do not care. Whichever, it should be clear. + var _f_result = exporter.write_json_file(gut, result_json_path) _wrote_results = true -func _exit_tree(): - if(!_wrote_results and ran_from_editor): - _write_results() +func _handle_quit(should_exit, should_exit_on_success, override_exit_code=EXIT_OK): + var quitting_time = should_exit or \ + (should_exit_on_success and gut.get_fail_count() == 0) + if(!quitting_time): + if(should_exit_on_success): + lgr.log("There are failing tests, exit manually.") + _gui.use_compact_mode(false) + return -func _on_tests_finished(should_exit, should_exit_on_success): - _write_results() + # For some reason, tests fail asserting that quit was called with 0 if we + # do not do this, but everything is defaulted so I don't know why it gets + # null. + var exit_code = GutUtils.nvl(override_exit_code, EXIT_OK) - if(should_exit): - get_tree().quit() - elif(should_exit_on_success and _gut.get_fail_count() == 0): - get_tree().quit() + if(gut.get_fail_count() > 0): + exit_code = EXIT_ERROR + # Overwrite the exit code with the post_script's exit code if it is set + var post_hook_inst = gut.get_post_run_script_instance() + if(post_hook_inst != null and post_hook_inst.get_exit_code() != null): + exit_code = post_hook_inst.get_exit_code() + + quit(exit_code) -func run_tests(show_gui=true): - _lazy_make_gut() +func _end_run(override_exit_code=EXIT_OK): + if(ran_from_editor): + _write_results_for_gut_panel() + + _handle_quit(gut_config.options.should_exit, + gut_config.options.should_exit_on_success, + override_exit_code) + + +# ------------- +# Events +# ------------- +func _on_tests_finished(): + _end_run() + + +# ------------- +# Public +# ------------- +func run_tests(show_gui=true): _setup_gui(show_gui) - _gut.add_children_to = self - if(_gut.get_parent() == null): - if(_gut_config.options.gut_on_top): - _gut_layer.add_child(_gut) + if(gut_config.options.dirs.size() + gut_config.options.tests.size() == 0): + var err_text = "You do not have any directories configrued, so GUT doesn't know where to find the tests. Tell GUT where to find the tests and GUT shall run the tests." + lgr.error(err_text) + push_error(err_text) + _end_run(EXIT_ERROR) + return + + var install_check_text = GutUtils.make_install_check_text() + if(install_check_text != GutUtils.INSTALL_OK_TEXT): + print("\n\n", GutUtils.version_numbers.get_version_text()) + lgr.error(install_check_text) + push_error(install_check_text) + _end_run(EXIT_ERROR) + return + + gut.add_children_to = self + if(gut.get_parent() == null): + if(gut_config.options.gut_on_top): + _gut_layer.add_child(gut) else: - add_child(_gut) + add_child(gut) - if(ran_from_editor): - _gut.end_run.connect(_on_tests_finished.bind(_gut_config.options.should_exit, _gut_config.options.should_exit_on_success)) + gut.end_run.connect(_on_tests_finished) - _gut_config.apply_options(_gut) - var run_rest_of_scripts = _gut_config.options.unit_test_name == '' + gut_config.apply_options(gut) + var run_rest_of_scripts = gut_config.options.unit_test_name == '' - _gut.test_scripts(run_rest_of_scripts) + gut.test_scripts(run_rest_of_scripts) -func get_gut(): - _lazy_make_gut() - return _gut +func set_gut_config(which): + gut_config = which -func set_gut_config(which): - _gut_config = which +# for backwards compatibility +func get_gut(): + return gut +func quit(exit_code): + # Sometimes quitting takes a few seconds. This gives some indicator + # of what is going on. + _gui.set_title("Exiting") + await get_tree().process_frame + lgr.info(str('Exiting with code ', exit_code)) + get_tree().quit(exit_code) # ############################################################################## # The MIT License (MIT) diff --git a/addons/gut/gui/ResizeHandle.gd b/addons/gut/gui/ResizeHandle.gd index 3d46fde3..a79f6e37 100644 --- a/addons/gut/gui/ResizeHandle.gd +++ b/addons/gut/gui/ResizeHandle.gd @@ -1,8 +1,8 @@ @tool extends ColorRect # ############################################################################# -# Resize Handle control. Place onto a control. Set the orientation, then -# set the control that this should resize. Then you can resize the control +# Resize Handle control. Place onto a control. Set the orientation, then +# set the control that this should resize. Then you can resize the control # by dragging this thing around. It's pretty neat. # ############################################################################# enum ORIENTATION { @@ -23,7 +23,6 @@ var _line_color = Color(.4, .4, .4) var _active_line_color = Color(.3, .3, .3) var _invalid_line_color = Color(1, 0, 0) -var _grab_margin = 2 var _line_space = 3 var _num_lines = 8 @@ -56,30 +55,30 @@ func _gui_input(event): # Draw the lines in the corner to show where you can # drag to resize the dialog -func _draw_resize_handle_right(color): +func _draw_resize_handle_right(draw_color): var br = size for i in range(_num_lines): var start = br - Vector2(i * _line_space, 0) var end = br - Vector2(0, i * _line_space) - draw_line(start, end, color, _line_width, true) + draw_line(start, end, draw_color, _line_width, true) -func _draw_resize_handle_left(color): +func _draw_resize_handle_left(draw_color): var bl = Vector2(0, size.y) - + for i in range(_num_lines): var start = bl + Vector2(i * _line_space, 0) var end = bl - Vector2(0, i * _line_space) - draw_line(start, end, color, _line_width, true) + draw_line(start, end, draw_color, _line_width, true) func _handle_right_input(event : InputEvent): if(event is InputEventMouseMotion): - if(_mouse_down and - event.global_position.x > 0 and + if(_mouse_down and + event.global_position.x > 0 and event.global_position.y < DisplayServer.window_get_size().y): - + if(vertical_resize): resize_control.size.y += event.relative.y resize_control.size.x += event.relative.x @@ -91,15 +90,15 @@ func _handle_right_input(event : InputEvent): func _handle_left_input(event : InputEvent): if(event is InputEventMouseMotion): - if(_mouse_down and - event.global_position.x > 0 and + if(_mouse_down and + event.global_position.x > 0 and event.global_position.y < DisplayServer.window_get_size().y): - + var start_size = resize_control.size resize_control.size.x -= event.relative.x if(resize_control.size.x != start_size.x): resize_control.global_position.x += event.relative.x - + if(vertical_resize): resize_control.size.y += event.relative.y elif(event is InputEventMouseButton): diff --git a/addons/gut/gui/ResultsTree.gd b/addons/gut/gui/ResultsTree.gd index c063811d..f512a5cf 100644 --- a/addons/gut/gui/ResultsTree.gd +++ b/addons/gut/gui/ResultsTree.gd @@ -274,12 +274,17 @@ func _load_result_tree(j): # 'nothing to see here' should be visible. clear_centered_text() + var add_count = 0 for key in script_keys: if(scripts[key]['props']['tests'] > 0): + add_count += 1 _add_script_to_tree(key, scripts[key]) _free_childless_scripts() - _show_all_passed() + if(add_count == 0): + add_centered_text('Nothing was run') + else: + _show_all_passed() # ------------------- diff --git a/addons/gut/gui/gut_gui.gd b/addons/gut/gui/gut_gui.gd index 68eb2c2b..6846fb45 100644 --- a/addons/gut/gui/gut_gui.gd +++ b/addons/gut/gui/gut_gui.gd @@ -30,19 +30,10 @@ var _title_mouse = { down = false } -var _resize_mouse = { - down = false -} - -var _resize_left_mouse = { - down = false -} - signal switch_modes() var _max_position = Vector2(100, 100) -var _utils = null func _ready(): _populate_ctrls() @@ -183,7 +174,7 @@ func next_script(path, num_tests): _ctrls.path_file.text = path.get_file() -func next_test(test_name): +func next_test(__test_name): _ctrls.prog_test.value += 1 diff --git a/addons/gut/gut.gd b/addons/gut/gut.gd index 60569803..34bd1d4d 100644 --- a/addons/gut/gut.gd +++ b/addons/gut/gut.gd @@ -1,4 +1,5 @@ extends 'res://addons/gut/gut_to_move.gd' +class_name GutMain # ############################################################################## # @@ -152,7 +153,7 @@ var parameter_handler = _parameter_handler : _parameter_handler = val _parameter_handler.set_logger(_lgr) -var _lgr = _utils.get_logger() +var _lgr = GutUtils.get_logger() # Local reference for the common logger. ## FOR INERNAL USE ONLY var logger = _lgr : @@ -179,31 +180,31 @@ var treat_error_as_failure = _treat_error_as_failure: # ------------ # Read only # ------------ -var _test_collector = _utils.TestCollector.new() +var _test_collector = GutUtils.TestCollector.new() func get_test_collector(): return _test_collector # var version = null : func get_version(): - return _utils.version + return GutUtils.version_numbers.gut_version -var _orphan_counter = _utils.OrphanCounter.new() +var _orphan_counter = GutUtils.OrphanCounter.new() func get_orphan_counter(): return _orphan_counter -var _autofree = _utils.AutoFree.new() +var _autofree = GutUtils.AutoFree.new() func get_autofree(): return _autofree -var _stubber = _utils.Stubber.new() +var _stubber = GutUtils.Stubber.new() func get_stubber(): return _stubber -var _doubler = _utils.Doubler.new() +var _doubler = GutUtils.Doubler.new() func get_doubler(): return _doubler -var _spy = _utils.Spy.new() +var _spy = GutUtils.Spy.new() func get_spy(): return _spy @@ -218,18 +219,19 @@ func is_running(): var _should_print_versions = true # used to cut down on output in tests. var _should_print_summary = true -var _test_prefix = 'test_' var _file_prefix = 'test_' var _inner_class_prefix = 'Test' var _select_script = '' var _last_paint_time = 0.0 -var _strutils = _utils.Strutils.new() +var _strutils = GutUtils.Strutils.new() # The instance that is created from _pre_run_script. Accessible from -# get_pre_run_script_instance. +# get_pre_run_script_instance. These are created at the start of the run +# and then referenced at the appropriate time. This allows us to validate the +# scripts prior to running. var _pre_run_script_instance = null -var _post_run_script_instance = null # This is not used except in tests. +var _post_run_script_instance = null var _script_name = null @@ -237,7 +239,6 @@ var _script_name = null var _test_script_objects = [] var _waiting = false -var _done = false # msecs ticks when run was started var _start_time = 0.0 @@ -247,8 +248,6 @@ var _current_test = null var _pause_before_teardown = false -var _awaiter = _utils.Awaiter.new() - # Used to cancel importing scripts if an error has occurred in the setup. This # prevents tests from being run if they were exported and ensures that the # error displayed is seen since importing generates a lot of text. @@ -264,7 +263,7 @@ var _auto_queue_free_delay = .1 # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ func _init(): - # When running tests for GUT itself, _utils has been setup to always return + # When running tests for GUT itself, GutUtils has been setup to always return # a new logger so this does not set the gut instance on the base logger # when creating test instances of GUT. _lgr.set_gut(self) @@ -285,18 +284,10 @@ func _init(): # Initialize controls # ------------------------------------------------------------------------------ func _ready(): - if(!_utils.is_version_ok()): - _print_versions() - push_error(_utils.get_bad_version_text()) - print('Error: ', _utils.get_bad_version_text()) - get_tree().quit() - return - if(_should_print_versions): + _lgr.log('--- GUT ---') _lgr.info(str('using [', OS.get_user_data_dir(), '] for temporary output.')) - add_child(_awaiter) - if(_select_script != null): select_script(_select_script) @@ -307,20 +298,18 @@ func _ready(): # ------------------------------------------------------------------------------ func _notification(what): if(what == NOTIFICATION_PREDELETE): - for test_script in _test_script_objects: - if(is_instance_valid(test_script)): - test_script.free() + for ts in _test_script_objects: + if(is_instance_valid(ts)): + ts.free() _test_script_objects = [] - if(is_instance_valid(_awaiter)): - _awaiter.free() func _print_versions(send_all = true): if(!_should_print_versions): return - var info = _utils.get_version_text() + var info = GutUtils.version_numbers.get_version_text() if(send_all): p(info) @@ -379,7 +368,7 @@ func _log_test_children_warning(test_script): return var kids = test_script.get_children() - if(kids.size() > 0): + if(kids.size() > 1): var msg = '' if(_log_level == 2): msg = "Test script still has children when all tests finisehd.\n" @@ -389,13 +378,12 @@ func _log_test_children_warning(test_script): else: msg = str("Test script has ", kids.size(), " unfreed children. Increase log level for more details.") - _lgr.warn(msg) func _log_end_run(): if(_should_print_summary): - var summary = _utils.Summary.new(self) + var summary = GutUtils.Summary.new(self) summary.log_end_run() @@ -426,7 +414,7 @@ func _validate_hook_script(path): # ------------------------------------------------------------------------------ # Runs a hook script. Script must exist, and must extend -# res://addons/gut/hook_script.gd +# GutHookScript or addons/gut/hook_script.gd # ------------------------------------------------------------------------------ func _run_hook_script(inst): if(inst != null): @@ -461,7 +449,7 @@ func _end_run(): _log_end_run() _is_running = false - _run_hook_script(_post_run_script_instance) + _run_hook_script(get_post_run_script_instance()) _export_results() end_run.emit() @@ -476,7 +464,7 @@ func _export_results(): # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ func _export_junit_xml(): - var exporter = _utils.JunitXmlExport.new() + var exporter = GutUtils.JunitXmlExport.new() var output_file = _junit_xml_file if(_junit_xml_timestamp): @@ -506,12 +494,29 @@ func _does_class_name_match(the_class_name, script_class_name): # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ -func _setup_script(test_script): +func _setup_script(test_script, collected_script): test_script.gut = self test_script.set_logger(_lgr) _add_children_to.add_child(test_script) _test_script_objects.append(test_script) + if(!test_script._was_ready_called): + test_script._do_ready_stuff() + _lgr.warn(str("!!! YOU HAVE UPSET YOUR GUT !!!\n", + "You have overridden _ready in [", collected_script.get_filename_and_inner(), "] ", + "but it does not call super._ready(). New additions (or maybe old ", + "by the time you see this) require that super._ready() is called.", + "\n\n", + "GUT is working around this infraction, but may not be able to in ", + "the future. GUT also reserves the right to decide it does not want ", + "to work around it in the future. ", + "You should probably use before_all instead of _ready. I can think ", + "of a few reasons why you would want to use _ready but I won't list ", + "them here because I think they are bad ideas. I know they are bad ", + "ideas because I did them. Hence the warning. This message is ", + "intentially long so that it bothers you and you change your ways.\n\n", + "Thank you for using GUT.")) + # ------------------------------------------------------------------------------ # returns self so it can be integrated into the yield call. @@ -524,10 +529,10 @@ func _wait_for_continue_button(): # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ -func _get_indexes_matching_script_name(name): +func _get_indexes_matching_script_name(script_name): var indexes = [] # empty runs all for i in range(_test_collector.scripts.size()): - if(_test_collector.scripts[i].get_filename().find(name) != -1): + if(_test_collector.scripts[i].get_filename().find(script_name) != -1): indexes.append(i) return indexes @@ -571,7 +576,6 @@ func _run_test(script_inst, test_name): _lgr.log_test_name() _lgr.set_indent_level(1) _orphan_counter.add_counter('test') - var script_result = null await script_inst.before_each() @@ -611,7 +615,7 @@ func _run_test(script_inst, test_name): # Calls both pre-all-tests methods until prerun_setup is removed # ------------------------------------------------------------------------------ func _call_before_all(test_script, collected_script): - var before_all_test_obj = _utils.CollectedTest.new() + var before_all_test_obj = GutUtils.CollectedTest.new() before_all_test_obj.has_printed_name = false before_all_test_obj.name = 'before_all' @@ -636,7 +640,7 @@ func _call_before_all(test_script, collected_script): # Calls both post-all-tests methods until postrun_teardown is removed. # ------------------------------------------------------------------------------ func _call_after_all(test_script, collected_script): - var after_all_test_obj = _utils.CollectedTest.new() + var after_all_test_obj = GutUtils.CollectedTest.new() after_all_test_obj.has_printed_name = false after_all_test_obj.name = 'after_all' @@ -653,11 +657,42 @@ func _call_after_all(test_script, collected_script): _current_test = null +# ------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ +func _should_skip_script(test_script, collected_script): + var skip_message = 'not skipped' + var skip_value = test_script.get('skip_script') + var should_skip = false + + if(skip_value == null): + skip_value = test_script.should_skip_script() + else: + _lgr.deprecated('Using the skip_script var has been deprecated. Implement the new should_skip_script() method in your test instead.') + + if(skip_value != null): + if(typeof(skip_value) == TYPE_BOOL): + should_skip = skip_value + if(skip_value): + skip_message = 'script marked to skip' + elif(typeof(skip_value) == TYPE_STRING): + should_skip = true + skip_message = skip_value + + if(should_skip): + var msg = str('- [Script skipped]: ', skip_message) + _lgr.inc_indent() + _lgr.log(msg, _lgr.fmts.yellow) + _lgr.dec_indent() + collected_script.skip_reason = skip_message + collected_script.was_skipped = true + + return should_skip + # ------------------------------------------------------------------------------ # Run all tests in a script. This is the core logic for running tests. # ------------------------------------------------------------------------------ func _test_the_scripts(indexes=[]): - _orphan_counter.add_counter('total') + _orphan_counter.add_counter('pre_run') _print_versions(false) var is_valid = _init_run() @@ -665,7 +700,7 @@ func _test_the_scripts(indexes=[]): _lgr.error('Something went wrong and the run was aborted.') return - _run_hook_script(_pre_run_script_instance) + _run_hook_script(get_pre_run_script_instance()) if(_pre_run_script_instance!= null and _pre_run_script_instance.should_abort()): _lgr.error('pre-run abort') end_run.emit() @@ -699,24 +734,16 @@ func _test_the_scripts(indexes=[]): var test_script = coll_script.get_new() + _setup_script(test_script, coll_script) + _doubler.set_strategy(_double_strategy) + # ---- # SHORTCIRCUIT # skip_script logic - var skip_script = test_script.get('skip_script') - if(skip_script != null): - var msg = str('- [Script skipped]: ', skip_script) - _lgr.inc_indent() - _lgr.log(msg, _lgr.fmts.yellow) - _lgr.dec_indent() - coll_script.skip_reason = skip_script - coll_script.was_skipped = true + if(_should_skip_script(test_script, coll_script)): continue # ---- - var script_result = null - _setup_script(test_script) - _doubler.set_strategy(_double_strategy) - # !!! # Hack so there isn't another indent to this monster of a method. if # inner class is set and we do not have a match then empty the tests @@ -729,37 +756,33 @@ func _test_the_scripts(indexes=[]): await _call_before_all(test_script, coll_script) # Each test in the script - var skip_suffix = '_skip__' - coll_script.mark_tests_to_skip_with_suffix(skip_suffix) for i in range(coll_script.tests.size()): _stubber.clear() _spy.clear() _current_test = coll_script.tests[i] - script_result = null - - # ------------------ - # SHORTCIRCUI - if(_current_test.should_skip): - continue - # ------------------ if((_unit_test_name != '' and _current_test.name.find(_unit_test_name) > -1) or (_unit_test_name == '')): + var ticks_before := Time.get_ticks_usec() + if(_current_test.arg_count > 1): _lgr.error(str('Parameterized test ', _current_test.name, ' has too many parameters: ', _current_test.arg_count, '.')) elif(_current_test.arg_count == 1): _current_test.was_run = true - script_result = await _run_parameterized_test(test_script, _current_test.name) + await _run_parameterized_test(test_script, _current_test.name) else: _current_test.was_run = true - script_result = await _run_test(test_script, _current_test.name) + await _run_test(test_script, _current_test.name) if(!_current_test.did_something()): _lgr.risky(str(_current_test.name, ' did not assert')) _current_test.has_printed_name = false + + _current_test.time_taken = (Time.get_ticks_usec() - ticks_before) / 1000000.0 + end_test.emit() # After each test, check to see if we shoudl wait a frame to @@ -794,6 +817,11 @@ func _test_the_scripts(indexes=[]): # END TEST SCRIPT LOOP _lgr.set_indent_level(0) + # Give anything that is queued to be freed time to be freed before we count + # the orphans. Without this, the last test's awaiter won't be freed + # yet, which messes with the orphans total. There could also be objects + # the user has queued to be freed as well. + await get_tree().create_timer(.1).timeout _end_run() @@ -916,7 +944,7 @@ func _get_files(path, prefix, suffix): # public # ######################### -func get_elapsed_time(): +func get_elapsed_time() -> float: var to_return = 0.0 if(_start_time != 0.0): to_return = Time.get_ticks_msec() - _start_time @@ -948,13 +976,14 @@ func p(text, level=0): # ------------------------------------------------------------------------------ # Runs all the scripts that were added using add_script # ------------------------------------------------------------------------------ -func test_scripts(run_rest=false): +func test_scripts(_run_rest=false): if(_script_name != null and _script_name != ''): var indexes = _get_indexes_matching_script_name(_script_name) if(indexes == []): _lgr.error(str( "Could not find script matching '", _script_name, "'.\n", "Check your directory settings and Script Prefix/Suffix settings.")) + end_run.emit() else: _test_the_scripts(indexes) else: @@ -968,11 +997,11 @@ func run_tests(run_rest=false): # ------------------------------------------------------------------------------ # Runs a single script passed in. # ------------------------------------------------------------------------------ -func test_script(script): - _test_collector.set_test_class_prefix(_inner_class_prefix) - _test_collector.clear() - _test_collector.add_script(script) - _test_the_scripts() +# func run_test_script(script): +# _test_collector.set_test_class_prefix(_inner_class_prefix) +# _test_collector.clear() +# _test_collector.add_script(script) +# _test_the_scripts() # ------------------------------------------------------------------------------ @@ -1035,7 +1064,7 @@ func export_tests(path=_export_path): # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ func import_tests(path=_export_path): - if(!_utils.file_exists(path)): + if(!FileAccess.file_exists(path)): _lgr.error(str('Cannot import tests: the path [', path, '] does not exist.')) else: _test_collector.clear() @@ -1117,34 +1146,6 @@ func pause_before_teardown(): _pause_before_teardown = true; -# ------------------------------------------------------------------------------ -# Uses the awaiter to wait for x amount of time. The signal emitted when the -# time has expired is returned (_awaiter.timeout). -# ------------------------------------------------------------------------------ -func set_wait_time(time, text=''): - _awaiter.wait_for(time) - _lgr.yield_msg(str('-- Awaiting ', time, ' second(s) -- ', text)) - return _awaiter.timeout - - -# ------------------------------------------------------------------------------ -# Uses the awaiter to wait for x frames. The signal emitted is returned. -# ------------------------------------------------------------------------------ -func set_wait_frames(frames, text=''): - _awaiter.wait_frames(frames) - _lgr.yield_msg(str('-- Awaiting ', frames, ' frame(s) -- ', text)) - return _awaiter.timeout - - -# ------------------------------------------------------------------------------ -# Wait for a signal or a maximum amount of time. The signal emitted is returned. -# ------------------------------------------------------------------------------ -func set_wait_for_signal_or_time(obj, signal_name, max_wait, text=''): - _awaiter.wait_for_signal(Signal(obj, signal_name), max_wait) - _lgr.yield_msg(str('-- Awaiting signal "', signal_name, '" or for ', max_wait, ' second(s) -- ', text)) - return _awaiter.timeout - - # ------------------------------------------------------------------------------ # Returns the script object instance that is currently being run. # ------------------------------------------------------------------------------ @@ -1164,7 +1165,7 @@ func get_current_test_object(): ## Returns a summary.gd object that contains all the information about ## the run results. func get_summary(): - return _utils.Summary.new(self) + return GutUtils.Summary.new(self) # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ @@ -1182,10 +1183,20 @@ func show_orphans(should): _lgr.set_type_enabled(_lgr.types.orphan, should) +# ------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ func get_logger(): return _lgr +# ------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ +func get_test_script_count(): + return _test_script_objects.size() + + + + # ############################################################################## # The MIT License (MIT) # ===================== diff --git a/addons/gut/gut_cmdln.gd b/addons/gut/gut_cmdln.gd index 48d67603..7327d671 100644 --- a/addons/gut/gut_cmdln.gd +++ b/addons/gut/gut_cmdln.gd @@ -2,313 +2,15 @@ # Description # ----------- # Command line interface for the GUT unit testing tool. Allows you to run tests -# from the command line instead of running a scene. Place this script along with -# gut.gd into your scripts directory at the root of your project. Once there you -# can run this script (from the root of your project) using the following command: -# godot -s -d test/gut/gut_cmdln.gd +# from the command line instead of running a scene. You can run this script +# (from the root of your project) using the following command: +# godot -s test/gut/gut_cmdln.gd # -# See the readme for a list of options and examples. You can also use the -gh +# See the wiki for a list of options and examples. You can also use the -gh # option to get more information about how to use the command line interface. # ------------------------------------------------------------------------------ extends SceneTree -var Optparse = load('res://addons/gut/optparse.gd') -var Gut = load('res://addons/gut/gut.gd') -var GutRunner = load('res://addons/gut/gui/GutRunner.tscn') - -var json = JSON.new() - -# ------------------------------------------------------------------------------ -# Helper class to resolve the various different places where an option can -# be set. Using the get_value method will enforce the order of precedence of: -# 1. command line value -# 2. config file value -# 3. default value -# -# The idea is that you set the base_opts. That will get you a copies of the -# hash with null values for the other types of values. Lower precedented hashes -# will punch through null values of higher precedented hashes. -# ------------------------------------------------------------------------------ -class OptionResolver: - var base_opts = {} - var cmd_opts = {} - var config_opts = {} - - - func get_value(key): - return _nvl(cmd_opts[key], _nvl(config_opts[key], base_opts[key])) - - func set_base_opts(opts): - base_opts = opts - cmd_opts = _null_copy(opts) - config_opts = _null_copy(opts) - - # creates a copy of a hash with all values null. - func _null_copy(h): - var new_hash = {} - for key in h: - new_hash[key] = null - return new_hash - - func _nvl(a, b): - if(a == null): - return b - else: - return a - func _string_it(h): - var to_return = '' - for key in h: - to_return += str('(',key, ':', _nvl(h[key], 'NULL'), ')') - return to_return - - func to_s(): - return str("base:\n", _string_it(base_opts), "\n", \ - "config:\n", _string_it(config_opts), "\n", \ - "cmd:\n", _string_it(cmd_opts), "\n", \ - "resolved:\n", _string_it(get_resolved_values())) - - func get_resolved_values(): - var to_return = {} - for key in base_opts: - to_return[key] = get_value(key) - return to_return - - func to_s_verbose(): - var to_return = '' - var resolved = get_resolved_values() - for key in base_opts: - to_return += str(key, "\n") - to_return += str(' default: ', _nvl(base_opts[key], 'NULL'), "\n") - to_return += str(' config: ', _nvl(config_opts[key], ' --'), "\n") - to_return += str(' cmd: ', _nvl(cmd_opts[key], ' --'), "\n") - to_return += str(' final: ', _nvl(resolved[key], 'NULL'), "\n") - - return to_return - -# ------------------------------------------------------------------------------ -# Here starts the actual script that uses the Options class to kick off Gut -# and run your tests. -# ------------------------------------------------------------------------------ -var _utils = null -var _gut_config = load('res://addons/gut/gut_config.gd').new() -# instance of gut -var _tester = null -# array of command line options specified -var _final_opts = [] - - -func setup_options(options, font_names): - var opts = Optparse.new() - opts.set_banner( -""" -The GUT CLI ------------ -The default behavior for GUT is to load options from a res://.gutconfig.json if -it exists. Any options specified on the command line will take precedence over -options specified in the gutconfig file. You can specify a different gutconfig -file with the -gconfig option. - -To generate a .gutconfig.json file you can use -gprint_gutconfig_sample -To see the effective values of a CLI command and a gutconfig use -gpo - -Any option that requires a value will take the form of \"-g=\". -There cannot be any spaces between the option, the \"=\", or ' + 'inside a -specified value or godot will think you are trying to run a scene. -""") - # Run specific things - opts.add('-gselect', '', ('All scripts that contain the specified string in their filename will be ran')) - opts.add('-ginner_class', '', 'Only run inner classes that contain the specified string int their name.') - opts.add('-gunit_test_name', '', ('Any test that contains the specified text will be run, all others will be skipped.')) - - # Run Config - opts.add('-ginclude_subdirs', false, 'Include subdirectories of -gdir.') - opts.add('-gdir', options.dirs, 'Comma delimited list of directories to add tests from.') - opts.add('-gtest', [], 'Comma delimited list of full paths to test scripts to run.') - opts.add('-gprefix', options.prefix, 'Prefix used to find tests when specifying -gdir. Default "[default]".') - opts.add('-gsuffix', options.suffix, 'Test script suffix, including .gd extension. Default "[default]".') - opts.add('-gconfig', 'res://.gutconfig.json', 'A config file that contains configuration information. Default is res://.gutconfig.json') - opts.add('-gpre_run_script', '', 'pre-run hook script path') - opts.add('-gpost_run_script', '', 'post-run hook script path') - opts.add('-gerrors_do_not_cause_failure', false, 'When an internal GUT error occurs tests will fail. With this option set, that does not happen.') - opts.add('-gdouble_strategy', 'SCRIPT_ONLY', 'Default strategy to use when doubling. Valid values are [INCLUDE_NATIVE, SCRIPT_ONLY]. Default "[default]"') - - # Misc - opts.add('-gpaint_after', options.paint_after, 'Delay before GUT will add a 1 frame pause to paint the screen/GUI. default [default]') - - # Display options - opts.add('-glog', options.log_level, 'Log level. Default [default]') - opts.add('-ghide_orphans', false, 'Display orphan counts for tests and scripts. Default "[default]".') - opts.add('-gmaximize', false, 'Maximizes test runner window to fit the viewport.') - opts.add('-gcompact_mode', false, 'The runner will be in compact mode. This overrides -gmaximize.') - opts.add('-gopacity', options.opacity, 'Set opacity of test runner window. Use range 0 - 100. 0 = transparent, 100 = opaque.') - opts.add('-gdisable_colors', false, 'Disable command line colors.') - opts.add('-gfont_name', options.font_name, str('Valid values are: ', font_names, '. Default "[default]"')) - opts.add('-gfont_size', options.font_size, 'Font size, default "[default]"') - opts.add('-gbackground_color', options.background_color, 'Background color as an html color, default "[default]"') - opts.add('-gfont_color',options.font_color, 'Font color as an html color, default "[default]"') - - # End Behavior - opts.add('-gexit', false, 'Exit after running tests. If not specified you have to manually close the window.') - opts.add('-gexit_on_success', false, 'Only exit if all tests pass.') - opts.add('-gignore_pause', false, 'Ignores any calls to gut.pause_before_teardown.') - - # Helpish options - opts.add('-gh', false, 'Print this help. You did this to see this, so you probably understand.') - opts.add('-gpo', false, 'Print option values from all sources and the value used.') - opts.add('-gprint_gutconfig_sample', false, 'Print out json that can be used to make a gutconfig file.') - - # Output options - opts.add('-gjunit_xml_file', options.junit_xml_file, 'Export results of run to this file in the Junit XML format.') - opts.add('-gjunit_xml_timestamp', options.junit_xml_timestamp, 'Include a timestamp in the -gjunit_xml_file, default [default]') - - return opts - - -# Parses options, applying them to the _tester or setting values -# in the options struct. -func extract_command_line_options(from, to): - to.config_file = from.get_value('-gconfig') - to.dirs = from.get_value('-gdir') - to.disable_colors = from.get_value('-gdisable_colors') - to.double_strategy = from.get_value('-gdouble_strategy') - to.ignore_pause = from.get_value('-gignore_pause') - to.include_subdirs = from.get_value('-ginclude_subdirs') - to.inner_class = from.get_value('-ginner_class') - to.log_level = from.get_value('-glog') - to.opacity = from.get_value('-gopacity') - to.post_run_script = from.get_value('-gpost_run_script') - to.pre_run_script = from.get_value('-gpre_run_script') - to.prefix = from.get_value('-gprefix') - to.selected = from.get_value('-gselect') - to.should_exit = from.get_value('-gexit') - to.should_exit_on_success = from.get_value('-gexit_on_success') - to.should_maximize = from.get_value('-gmaximize') - to.compact_mode = from.get_value('-gcompact_mode') - to.hide_orphans = from.get_value('-ghide_orphans') - to.suffix = from.get_value('-gsuffix') - to.errors_do_not_cause_failure = from.get_value('-gerrors_do_not_cause_failure') - to.tests = from.get_value('-gtest') - to.unit_test_name = from.get_value('-gunit_test_name') - - to.font_size = from.get_value('-gfont_size') - to.font_name = from.get_value('-gfont_name') - to.background_color = from.get_value('-gbackground_color') - to.font_color = from.get_value('-gfont_color') - to.paint_after = from.get_value('-gpaint_after') - - to.junit_xml_file = from.get_value('-gjunit_xml_file') - to.junit_xml_timestamp = from.get_value('-gjunit_xml_timestamp') - - - -func _print_gutconfigs(values): - var header = """Here is a sample of a full .gutconfig.json file. -You do not need to specify all values in your own file. The values supplied in -this sample are what would be used if you ran gut w/o the -gprint_gutconfig_sample -option (option priority: command-line, .gutconfig, default).""" - print("\n", header.replace("\n", ' '), "\n\n") - var resolved = values - - # remove_at some options that don't make sense to be in config - resolved.erase("config_file") - resolved.erase("show_help") - - print("Here's a config with all the properties set based off of your current command and config.") - print(json.stringify(resolved, ' ')) - - for key in resolved: - resolved[key] = null - - print("\n\nAnd here's an empty config for you fill in what you want.") - print(json.stringify(resolved, ' ')) - - -# parse options and run Gut -func _run_gut(): - var opt_resolver = OptionResolver.new() - opt_resolver.set_base_opts(_gut_config.default_options) - - print("\n\n", ' --- Gut ---') - var o = setup_options(_gut_config.default_options, _gut_config.valid_fonts) - - var all_options_valid = o.parse() - extract_command_line_options(o, opt_resolver.cmd_opts) - - var load_result = _gut_config.load_options_no_defaults( - opt_resolver.get_value('config_file')) - - # SHORTCIRCUIT - if(!all_options_valid or load_result == -1): - _end_run(1) - else: - opt_resolver.config_opts = _gut_config.options - - if(o.get_value('-gh')): - print(_utils.get_version_text()) - o.print_help() - _end_run(0) - elif(o.get_value('-gpo')): - print('All command line options and where they are specified. ' + - 'The "final" value shows which value will actually be used ' + - 'based on order of precedence (default < .gutconfig < cmd line).' + "\n") - print(opt_resolver.to_s_verbose()) - _end_run(0) - elif(o.get_value('-gprint_gutconfig_sample')): - _print_gutconfigs(opt_resolver.get_resolved_values()) - _end_run(0) - else: - _final_opts = opt_resolver.get_resolved_values(); - _gut_config.options = _final_opts - - var runner = GutRunner.instantiate() - - runner.ran_from_editor = false - runner.set_gut_config(_gut_config) - - get_root().add_child(runner) - _tester = runner.get_gut() - _tester.connect('end_run', Callable(self,'_on_tests_finished').bind(_final_opts.should_exit, _final_opts.should_exit_on_success)) - - run_tests(runner) - - -func run_tests(runner): - runner.run_tests() - - -func _end_run(exit_code=-9999): - if(is_instance_valid(_utils)): - _utils.free() - - if(exit_code != -9999): - quit(exit_code) - -# exit if option is set. -func _on_tests_finished(should_exit, should_exit_on_success): - if(_final_opts.dirs.size() == 0): - if(_tester.get_summary().get_totals().scripts == 0): - var lgr = _tester.logger - lgr.error('No directories configured. Add directories with options or a .gutconfig.json file. Use the -gh option for more information.') - - var exit_code = 0 - if(_tester.get_fail_count()): - exit_code = 1 - - # Overwrite the exit code with the post_script - var post_inst = _tester.get_post_run_script_instance() - if(post_inst != null and post_inst.get_exit_code() != null): - exit_code = post_inst.get_exit_code() - - if(should_exit or (should_exit_on_success and _tester.get_fail_count() == 0)): - _end_run(exit_code) - else: - _end_run() - print("Tests finished, exit manually") - - -# ------------------------------------------------------------------------------ -# MAIN -# ------------------------------------------------------------------------------ func _init(): var max_iter = 20 var iter = 0 @@ -323,13 +25,9 @@ func _init(): quit(0) return - _utils = GutUtils.get_instance() - if(!_utils.is_version_ok()): - print("\n\n", _utils.get_version_text()) - push_error(_utils.get_bad_version_text()) - _end_run(1) - else: - _run_gut() + var cli = load('res://addons/gut/cli/gut_cli.gd').new() + get_root().add_child(cli) + cli.main() # ############################################################################## diff --git a/addons/gut/gut_config.gd b/addons/gut/gut_config.gd index a0d5aa5a..a9fbeefc 100644 --- a/addons/gut/gut_config.gd +++ b/addons/gut/gut_config.gd @@ -4,10 +4,8 @@ # to a json file. It is also responsible for applying these settings to GUT. # # ############################################################################## -var Gut = load('res://addons/gut/gut.gd') - - var valid_fonts = ['AnonymousPro', 'CourierPro', 'LobsterTwo', 'Default'] + var default_options = { background_color = Color(.15, .15, .15, 1).to_html(), config_file = 'res://.gutconfig.json', @@ -53,7 +51,6 @@ var default_options = { var options = default_options.duplicate() -var json = JSON.new() func _null_copy(h): @@ -87,8 +84,6 @@ func _load_options_from_config_file(file_path, into): # SHORTCIRCUIT if(results == null): print("\n\n",'!! ERROR parsing file: ', file_path) - print(' at line ', results.error_line, ':') - print(' ', results.error_string) return -1 # Get all the options out of the config file using the option name. The @@ -146,7 +141,7 @@ func _apply_options(opts, gut): # Public # -------------------------- func write_options(path): - var content = json.stringify(options, ' ') + var content = JSON.stringify(options, ' ') var f = FileAccess.open(path, FileAccess.WRITE) var result = FileAccess.get_open_error() diff --git a/addons/gut/gut_to_move.gd b/addons/gut/gut_to_move.gd index 4b28ff73..925f2817 100644 --- a/addons/gut/gut_to_move.gd +++ b/addons/gut/gut_to_move.gd @@ -1,7 +1,6 @@ # Temporary base script for gut.gd to hold the things to be remvoed and added # to some utility somewhere. extends Node -var _utils = load('res://addons/gut/utils.gd').get_instance() # ------------------------------------------------------------------------------ # deletes all files in a given directory @@ -51,7 +50,7 @@ func is_file_empty(path): # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ func get_file_as_text(path): - return _utils.get_file_as_text(path) + return GutUtils.get_file_as_text(path) # ------------------------------------------------------------------------------ # Creates an empty file at the specified path diff --git a/addons/gut/input_sender.gd b/addons/gut/input_sender.gd index 26b666d9..1c9a1b66 100644 --- a/addons/gut/input_sender.gd +++ b/addons/gut/input_sender.gd @@ -73,7 +73,7 @@ class InputQueueItem: if(frame_delay > 0 and _delay_started): _waited_frames += 1 if(_waited_frames >= frame_delay): - emit_signal("event_ready") + event_ready.emit() func _init(t_delay,f_delay): time_delay = t_delay @@ -82,7 +82,7 @@ class InputQueueItem: func _on_time_timeout(): _is_ready = true - emit_signal("event_ready") + event_ready.emit() func _delay_timer(t): return Engine.get_main_loop().root.get_tree().create_timer(t) @@ -182,12 +182,11 @@ class MouseDraw: # ############################################################################## # # ############################################################################## -var _utils = load('res://addons/gut/utils.gd').get_instance() var InputFactory = load("res://addons/gut/input_factory.gd") const INPUT_WARN = 'If using Input as a reciever it will not respond to *_down events until a *_up event is recieved. Call the appropriate *_up event or use hold_for(...) to automatically release after some duration.' -var _lgr = _utils.get_logger() +var _lgr = GutUtils.get_logger() var _receivers = [] var _input_queue = [] var _next_queue_item = null @@ -277,6 +276,11 @@ func _send_event(event): for r in _receivers: if(r == Input): Input.parse_input_event(event) + if(event is InputEventAction): + if(event.pressed): + Input.action_press(event.action) + else: + Input.action_release(event.action) if(_auto_flush_input): Input.flush_buffered_events() else: @@ -322,6 +326,9 @@ func _new_defaulted_mouse_button_event(position, global_position): func _new_defaulted_mouse_motion_event(position, global_position): var event = InputEventMouseMotion.new() _apply_last_position_and_set_last_position(event, position, global_position) + for key in _pressed_mouse_buttons: + if(_pressed_mouse_buttons[key].pressed): + event.button_mask += key return event @@ -337,7 +344,7 @@ func _on_queue_item_ready(item): if(_input_queue.size() == 0): _next_queue_item = null - emit_signal("idle") + idle.emit() else: _input_queue[0].start() diff --git a/addons/gut/junit_xml_export.gd b/addons/gut/junit_xml_export.gd index 116cfdf9..7e438969 100644 --- a/addons/gut/junit_xml_export.gd +++ b/addons/gut/junit_xml_export.gd @@ -1,9 +1,7 @@ # ------------------------------------------------------------------------------ # Creates an export of a test run in the JUnit XML format. # ------------------------------------------------------------------------------ -var _utils = load('res://addons/gut/utils.gd').get_instance() - -var _exporter = _utils.ResultExporter.new() +var _exporter = GutUtils.ResultExporter.new() func indent(s, ind): var to_return = ind + s @@ -39,7 +37,8 @@ func _export_tests(script_result, classname): to_return += add_attr("name", key) to_return += add_attr("assertions", assert_count) to_return += add_attr("status", test.status) - to_return += add_attr("classname", classname) + to_return += add_attr("classname", classname.replace("res://", "")) + to_return += add_attr("time", test.time_taken) to_return += ">\n" to_return += _export_test_result(test) @@ -48,16 +47,25 @@ func _export_tests(script_result, classname): return to_return +func _sum_test_time(script_result, classname)->float: + var to_return := 0.0 + + for key in script_result.keys(): + var test = script_result[key] + to_return += test.time_taken + + return to_return func _export_scripts(exp_results): var to_return = "" for key in exp_results.test_scripts.scripts.keys(): var s = exp_results.test_scripts.scripts[key] to_return += "= 0 and type_flag < _supported_defaults.size() and _supported_defaults[type_flag] != null @@ -117,11 +116,11 @@ func _is_supported_default(type_flag): func _make_stub_default(method, index): return str('__gutdbl.default_val("', method, '",', index, ')') + func _make_arg_array(method_meta, override_size): var to_return = [] var has_unsupported_defaults = false - var dflt_start = method_meta.args.size() - method_meta.default_args.size() for i in range(method_meta.args.size()): var pname = method_meta.args[i].name @@ -253,10 +252,9 @@ func get_function_text(meta, override_size=null): return text - - func get_logger(): return _lgr + func set_logger(logger): _lgr = logger diff --git a/addons/gut/optparse.gd b/addons/gut/optparse.gd deleted file mode 100644 index f54988e0..00000000 --- a/addons/gut/optparse.gd +++ /dev/null @@ -1,252 +0,0 @@ -# ############################################################################## -#(G)odot (U)nit (T)est class -# -# ############################################################################## -# The MIT License (MIT) -# ===================== -# -# Copyright (c) 2020 Tom "Butch" Wesley -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# ############################################################################## -# Description -# ----------- -# Command line interface for the GUT unit testing tool. Allows you to run tests -# from the command line instead of running a scene. Place this script along with -# gut.gd into your scripts directory at the root of your project. Once there you -# can run this script (from the root of your project) using the following command: -# godot -s -d test/gut/gut_cmdln.gd -# -# See the readme for a list of options and examples. You can also use the -gh -# option to get more information about how to use the command line interface. -# ############################################################################## - -#------------------------------------------------------------------------------- -# Parses the command line arguments supplied into an array that can then be -# examined and parsed based on how the gut options work. -#------------------------------------------------------------------------------- -class CmdLineParser: - var _used_options = [] - # an array of arrays. Each element in this array will contain an option - # name and if that option contains a value then it will have a sedond - # element. For example: - # [[-gselect, test.gd], [-gexit]] - var _opts = [] - - func _init(): - for i in range(OS.get_cmdline_args().size()): - var opt_val = OS.get_cmdline_args()[i].split('=') - _opts.append(opt_val) - - # Parse out multiple comma delimited values from a command line - # option. Values are separated from option name with "=" and - # additional values are comma separated. - func _parse_array_value(full_option): - var value = _parse_option_value(full_option) - var split = value.split(',') - return split - - # Parse out the value of an option. Values are separated from - # the option name with "=" - func _parse_option_value(full_option): - if(full_option.size() > 1): - return full_option[1] - else: - return null - - # Search _opts for an element that starts with the option name - # specified. - func find_option(name): - var found = false - var idx = 0 - - while(idx < _opts.size() and !found): - if(_opts[idx][0] == name): - found = true - else: - idx += 1 - - if(found): - return idx - else: - return -1 - - func get_array_value(option): - _used_options.append(option) - var to_return = [] - var opt_loc = find_option(option) - if(opt_loc != -1): - to_return = _parse_array_value(_opts[opt_loc]) - _opts.remove_at(opt_loc) - - return to_return - - # returns the value of an option if it was specified, null otherwise. This - # used to return the default but that became problemnatic when trying to - # punch through the different places where values could be specified. - func get_value(option): - _used_options.append(option) - var to_return = null - var opt_loc = find_option(option) - if(opt_loc != -1): - to_return = _parse_option_value(_opts[opt_loc]) - _opts.remove_at(opt_loc) - - return to_return - - # returns true if it finds the option, false if not. - func was_specified(option): - _used_options.append(option) - return find_option(option) != -1 - - # Returns any unused command line options. I found that only the -s and - # script name come through from godot, all other options that godot uses - # are not sent through OS.get_cmdline_args(). - # - # This is a onetime thing b/c i kill all items in _used_options - func get_unused_options(): - var to_return = [] - for i in range(_opts.size()): - to_return.append(_opts[i][0]) - - var script_option = to_return.find("-s") - if script_option == -1: - script_option = to_return.find("--script") - if script_option != -1: - to_return.remove_at(script_option + 1) - to_return.remove_at(script_option) - - while(_used_options.size() > 0): - var index = to_return.find(_used_options[0].split("=")[0]) - if(index != -1): - to_return.remove_at(index) - _used_options.remove_at(0) - - return to_return - -#------------------------------------------------------------------------------- -# Simple class to hold a command line option -#------------------------------------------------------------------------------- -class Option: - var value = null - var option_name = '' - var default = null - var description = '' - - func _init(name,default_value,desc=''): - option_name = name - default = default_value - description = desc - value = null#default_value - - func pad(to_pad, size, pad_with=' '): - var to_return = to_pad - for _i in range(to_pad.length(), size): - to_return += pad_with - - return to_return - - func to_s(min_space=0): - var subbed_desc = description - if(subbed_desc.find('[default]') != -1): - subbed_desc = subbed_desc.replace('[default]', str(default)) - return pad(option_name, min_space) + subbed_desc - -#------------------------------------------------------------------------------- -# The high level interface between this script and the command line options -# supplied. Uses Option class and CmdLineParser to extract information from -# the command line and make it easily accessible. -#------------------------------------------------------------------------------- -var options = [] -var _opts = [] -var _banner = '' - -func add(name, default, desc): - options.append(Option.new(name, default, desc)) - -func get_value(name): - var found = false - var idx = 0 - - while(idx < options.size() and !found): - if(options[idx].option_name == name): - found = true - else: - idx += 1 - - if(found): - return options[idx].value - else: - print("COULD NOT FIND OPTION " + name) - return null - -func set_banner(banner): - _banner = banner - -func print_help(): - var longest = 0 - for i in range(options.size()): - if(options[i].option_name.length() > longest): - longest = options[i].option_name.length() - - print('---------------------------------------------------------') - print(_banner) - - print("\nOptions\n-------") - for i in range(options.size()): - print(' ' + options[i].to_s(longest + 2)) - print('---------------------------------------------------------') - -func print_options(): - for i in range(options.size()): - print(options[i].option_name + '=' + str(options[i].value)) - -func parse(): - var parser = CmdLineParser.new() - - for i in range(options.size()): - var t = typeof(options[i].default) - # only set values that were specified at the command line so that - # we can punch through default and config values correctly later. - # Without this check, you can't tell the difference between the - # defaults and what was specified, so you can't punch through - # higher level options. - if(parser.was_specified(options[i].option_name)): - if(t == TYPE_INT): - options[i].value = int(parser.get_value(options[i].option_name)) - elif(t == TYPE_STRING): - options[i].value = parser.get_value(options[i].option_name) - elif(t == TYPE_ARRAY): - options[i].value = parser.get_array_value(options[i].option_name) - elif(t == TYPE_BOOL): - options[i].value = parser.was_specified(options[i].option_name) - elif(t == TYPE_FLOAT): - options[i].value = parser.get_value(options[i].option_name) - elif(t == TYPE_NIL): - print(options[i].option_name + ' cannot be processed, it has a nil datatype') - else: - print(options[i].option_name + ' cannot be processed, it has unknown datatype:' + str(t)) - - var unused = parser.get_unused_options() - if(unused.size() > 0): - print("Unrecognized options: ", unused) - return false - - return true diff --git a/addons/gut/orphan_counter.gd b/addons/gut/orphan_counter.gd index b31e2b6f..366ba92f 100644 --- a/addons/gut/orphan_counter.gd +++ b/addons/gut/orphan_counter.gd @@ -1,3 +1,46 @@ +# ------------------------------------------------------------------------------ +# This is used to track the change in orphans over different intervals. +# You use this by adding a counter at the start of an interval and then +# using get_orphans_since to find out how many orphans have been created since +# that counter was added. +# +# For example, when a test starts, gut adds a counter for "test" which +# creates/sets the counter's value to the current orphan count. At the end of +# the test GUT uses get_orphans_since("test") to find out how many orphans +# were created by the test. +# ------------------------------------------------------------------------------ +var _counters = {} + +func orphan_count(): + return Performance.get_monitor(Performance.OBJECT_ORPHAN_NODE_COUNT) + +func add_counter(name): + _counters[name] = orphan_count() + +# Returns the number of orphans created since add_counter was last called for +# the name. Returns -1 to avoid blowing up with an invalid name but still +# be somewhat visible that we've done something wrong. +func get_orphans_since(name): + return orphan_count() - _counters[name] if _counters.has(name) else -1 + +func get_count(name): + return _counters.get(name, -1) + +func print_orphans(name, lgr): + var count = get_orphans_since(name) + + if(count > 0): + var o = 'orphan' + if(count > 1): + o = 'orphans' + lgr.orphan(str(count, ' new ', o, ' in ', name, '.')) + +func print_all(): + var msg = str("Total Orphans ", orphan_count(), "\n", JSON.stringify(_counters, " ")) + print(msg) + + + # ############################################################################## #(G)odot (U)nit (T)est class # @@ -5,7 +48,7 @@ # The MIT License (MIT) # ===================== # -# Copyright (c) 2020 Tom "Butch" Wesley +# Copyright (c) 2024 Tom "Butch" Wesley # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -30,26 +73,4 @@ # add_counter is called it adds/resets the value in the dictionary to the # current number of orphans. Each call to get_counter will return the change # in orphans since add_counter was last called. -# ############################################################################## -var _counters = {} - -func orphan_count(): - return Performance.get_monitor(Performance.OBJECT_ORPHAN_NODE_COUNT) - -func add_counter(name): - _counters[name] = orphan_count() - -# Returns the number of orphans created since add_counter was last called for -# the name. Returns -1 to avoid blowing up with an invalid name but still -# be somewhat visible that we've done something wrong. -func get_counter(name): - return orphan_count() - _counters[name] if _counters.has(name) else -1 - -func print_orphans(name, lgr): - var count = get_counter(name) - - if(count > 0): - var o = 'orphan' - if(count > 1): - o = 'orphans' - lgr.orphan(str(count, ' new ', o, ' in ', name, '.')) +# ############################################################################## \ No newline at end of file diff --git a/addons/gut/parameter_handler.gd b/addons/gut/parameter_handler.gd index 6b37e82c..794d6934 100644 --- a/addons/gut/parameter_handler.gd +++ b/addons/gut/parameter_handler.gd @@ -1,11 +1,10 @@ -var _utils = load('res://addons/gut/utils.gd').get_instance() var _params = null var _call_count = 0 var _logger = null func _init(params=null): _params = params - _logger = _utils.get_logger() + _logger = GutUtils.get_logger() if(typeof(_params) != TYPE_ARRAY): _logger.error('You must pass an array to parameter_handler constructor.') _params = null diff --git a/addons/gut/plugin.cfg b/addons/gut/plugin.cfg index 510f4046..d6ce8f3d 100644 --- a/addons/gut/plugin.cfg +++ b/addons/gut/plugin.cfg @@ -3,5 +3,5 @@ name="Gut" description="Unit Testing tool for Godot." author="Butch Wesley" -version="9.2.1" +version="9.3.0" script="gut_plugin.gd" diff --git a/addons/gut/result_exporter.gd b/addons/gut/result_exporter.gd index e685fdb4..d085dada 100644 --- a/addons/gut/result_exporter.gd +++ b/addons/gut/result_exporter.gd @@ -4,7 +4,6 @@ # of a run and exporting it in a specific format. This can also serve as a # unofficial GUT export format. # ------------------------------------------------------------------------------ -var _utils = load('res://addons/gut/utils.gd').get_instance() var json = JSON.new() func _export_tests(collected_script): @@ -17,7 +16,8 @@ func _export_tests(collected_script): "passing":test.pass_texts, "failing":test.fail_texts, "pending":test.pending_texts, - "orphans":test.orphans + "orphans":test.orphans, + "time_taken": test.time_taken } return to_return @@ -61,9 +61,6 @@ func _make_results_dict(): return result -# TODO -# time -# errors func get_results_dictionary(gut, include_scripts=true): var scripts = [] @@ -82,7 +79,7 @@ func get_results_dictionary(gut, include_scripts=true): props.errors = gut.logger.get_errors().size() props.warnings = gut.logger.get_warnings().size() props.time = gut.get_elapsed_time() - props.orphans = gut.get_orphan_counter().get_counter('total') + props.orphans = gut.get_orphan_counter().get_orphans_since('pre_run') result.test_scripts.scripts = scripts return result @@ -90,12 +87,12 @@ func get_results_dictionary(gut, include_scripts=true): func write_json_file(gut, path): var dict = get_results_dictionary(gut) - var json_text = json.stringify(dict, ' ') + var json_text = JSON.stringify(dict, ' ') - var f_result = _utils.write_file(path, json_text) + var f_result = GutUtils.write_file(path, json_text) if(f_result != OK): var msg = str("Error: ", f_result, ". Could not create export file ", path) - _utils.get_logger().error(msg) + GutUtils.get_logger().error(msg) return f_result @@ -103,11 +100,11 @@ func write_json_file(gut, path): func write_summary_file(gut, path): var dict = get_results_dictionary(gut, false) - var json_text = json.stringify(dict, ' ') + var json_text = JSON.stringify(dict, ' ') - var f_result = _utils.write_file(path, json_text) + var f_result = GutUtils.write_file(path, json_text) if(f_result != OK): var msg = str("Error: ", f_result, ". Could not create export file ", path) - _utils.get_logger().error(msg) + GutUtils.get_logger().error(msg) return f_result diff --git a/addons/gut/script_parser.gd b/addons/gut/script_parser.gd index b2f37d54..ff5a556e 100644 --- a/addons/gut/script_parser.gd +++ b/addons/gut/script_parser.gd @@ -19,11 +19,10 @@ class ParsedMethod: var meta = _meta : get: return _meta set(val): return; - var is_local = false + var is_local = false var _parameters = [] - func _init(metadata): _meta = metadata var start_default = _meta.args.size() - _meta.default_args.size() @@ -76,7 +75,6 @@ class ParsedMethod: class ParsedScript: # All methods indexed by name. var _methods_by_name = {} - var _utils = load('res://addons/gut/utils.gd').get_instance() var _script_path = null var script_path = _script_path : @@ -93,24 +91,27 @@ class ParsedScript: get: return _resource set(val): return; - var _native_instance = null - var is_native = false : - get: return _native_instance != null + var _is_native = false + var is_native = _is_native: + get: return _is_native set(val): return; - func unreference(): - if(_native_instance != null): - _native_instance.free() - return super() + var _native_methods = {} + var _native_class_name = "" + func _init(script_or_inst, inner_class=null): var to_load = script_or_inst - if(_utils.is_native_class(to_load)): + if(GutUtils.is_native_class(to_load)): _resource = to_load - _native_instance = to_load.new() + _is_native = true + var inst = to_load.new() + _native_class_name = inst.get_class() + _native_methods = inst.get_method_list() + inst.free() else: if(!script_or_inst is Resource): to_load = load(script_or_inst.get_script().get_path()) @@ -129,14 +130,14 @@ class ParsedScript: func _print_flags(meta): - print(str(meta.name, ':').rpad(30), str(meta.flags).rpad(4), ' = ', _utils.dec2bistr(meta.flags, 10)) + print(str(meta.name, ':').rpad(30), str(meta.flags).rpad(4), ' = ', GutUtils.dec2bistr(meta.flags, 10)) func _get_native_methods(base_type): var to_return = [] if(base_type != null): var source = str('extends ', base_type) - var inst = _utils.create_script_from_source(source).new() + var inst = GutUtils.create_script_from_source(source).new() to_return = inst.get_method_list() if(! inst is RefCounted): inst.free() @@ -146,7 +147,7 @@ class ParsedScript: func _parse_methods(thing): var methods = [] if(is_native): - methods = _native_instance.get_method_list() + methods = _native_methods.duplicate() else: var base_type = thing.get_instance_base_type() methods = _get_native_methods(base_type) @@ -260,7 +261,7 @@ class ParsedScript: func get_extends_text(): var text = null if(is_native): - text = str("extends ", _native_instance.get_class()) + text = str("extends ", _native_class_name) else: text = str("extends '", _script_path, "'") if(_subpath != null): @@ -271,13 +272,11 @@ class ParsedScript: # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ var scripts = {} -var _utils = load('res://addons/gut/utils.gd').get_instance() - func _get_instance_id(thing): var inst_id = null - if(_utils.is_native_class(thing)): + if(GutUtils.is_native_class(thing)): var id_str = str(thing).replace("<", '').replace(">", '').split('#')[1] inst_id = id_str.to_int() elif(typeof(thing) == TYPE_STRING): @@ -307,7 +306,7 @@ func parse(thing, inner_thing=null): if(inner_thing != null): inner = instance_from_id(_get_instance_id(inner_thing)) - if(obj is Resource or _utils.is_native_class(obj)): + if(obj is Resource or GutUtils.is_native_class(obj)): parsed = ParsedScript.new(obj, inner) scripts[key] = parsed diff --git a/addons/gut/signal_watcher.gd b/addons/gut/signal_watcher.gd index 0193bc14..47626760 100644 --- a/addons/gut/signal_watcher.gd +++ b/addons/gut/signal_watcher.gd @@ -52,8 +52,7 @@ const ARG_NOT_SET = '_*_argument_*_is_*_not_set_*_' # - some_signal on ref2 was never emitted. # - other_signal on ref2 was emitted 3 times, each time with 3 parameters. var _watched_signals = {} -var _utils = load('res://addons/gut/utils.gd').get_instance() -var _lgr = _utils.get_logger() +var _lgr = GutUtils.get_logger() func _add_watched_signal(obj, name): # SHORTCIRCUIT - ignore dupes @@ -131,7 +130,7 @@ func watch_signal(object, signal_name): _add_watched_signal(object, signal_name) did = true else: - _utils.get_logger().warn(str(object, ' does not have signal ', signal_name)) + GutUtils.get_logger().warn(str(object, ' does not have signal ', signal_name)) return did func get_emit_count(object, signal_name): @@ -170,7 +169,7 @@ func is_watching(object, signal_name): func clear(): for obj in _watched_signals: - if(_utils.is_not_freed(obj)): + if(GutUtils.is_not_freed(obj)): for signal_name in _watched_signals[obj]: obj.disconnect(signal_name, Callable(self,'_on_watched_signal')) _watched_signals.clear() @@ -208,7 +207,7 @@ func get_signal_summary(obj): func print_signal_summary(obj): if(!is_watching_object(obj)): var msg = str('Not watching signals for ', obj) - _utils.get_logger().warn(msg) + GutUtils.get_logger().warn(msg) return var summary = get_signal_summary(obj) diff --git a/addons/gut/spy.gd b/addons/gut/spy.gd index 2aef4add..d2fd6223 100644 --- a/addons/gut/spy.gd +++ b/addons/gut/spy.gd @@ -9,9 +9,8 @@ # }, # } var _calls = {} -var _utils = load('res://addons/gut/utils.gd').get_instance() -var _lgr = _utils.get_logger() -var _compare = _utils.Comparator.new() +var _lgr = GutUtils.get_logger() +var _compare = GutUtils.Comparator.new() func _find_parameters(call_params, params_to_find): var found = false diff --git a/addons/gut/strutils.gd b/addons/gut/strutils.gd index 51e45cce..3a9be4d3 100644 --- a/addons/gut/strutils.gd +++ b/addons/gut/strutils.gd @@ -1,12 +1,12 @@ class_name GutStringUtils -var _utils = load('res://addons/gut/utils.gd').get_instance() # Hash containing all the built in types in Godot. This provides an English # name for the types that corosponds with the type constants defined in the # engine. var types = {} func _init_types_dictionary(): + types[TYPE_NIL] = 'NIL' types[TYPE_AABB] = 'AABB' types[TYPE_ARRAY] = 'ARRAY' types[TYPE_BASIS] = 'BASIS' @@ -68,11 +68,11 @@ func _get_obj_filename(thing): var filename = null if(thing == null or - _utils.is_native_class(thing) or + GutUtils.is_native_class(thing) or !is_instance_valid(thing) or str(thing) == '' or typeof(thing) != TYPE_OBJECT or - _utils.is_double(thing)): + GutUtils.is_double(thing)): return if(thing.get_script() == null): @@ -82,7 +82,7 @@ func _get_obj_filename(thing): # If it isn't a packed scene and it doesn't have a script then # we do nothing. This just reads better. pass - elif(!_utils.is_native_class(thing)): + elif(!GutUtils.is_native_class(thing)): var dict = inst_to_dict(thing) filename = _get_filename(dict['@path']) if(str(dict['@subpath']) != ''): @@ -116,9 +116,9 @@ func type2str(thing): # better this way. pass elif(typeof(thing) == TYPE_OBJECT): - if(_utils.is_native_class(thing)): - str_thing = _utils.get_native_class_name(thing) - elif(_utils.is_double(thing)): + if(GutUtils.is_native_class(thing)): + str_thing = GutUtils.get_native_class_name(thing) + elif(GutUtils.is_double(thing)): var double_path = _get_filename(thing.__gutdbl.thepath) if(thing.__gutdbl.subpath != ''): double_path += str('/', thing.__gutdbl.subpath) diff --git a/addons/gut/stub_params.gd b/addons/gut/stub_params.gd index ee4543f1..d24d90d7 100644 --- a/addons/gut/stub_params.gd +++ b/addons/gut/stub_params.gd @@ -1,5 +1,8 @@ -var _utils = load('res://addons/gut/utils.gd').get_instance() -var _lgr = _utils.get_logger() + +var _lgr = GutUtils.get_logger() +var logger = _lgr : + get: return _lgr + set(val): _lgr = val var return_val = null var stub_target = null @@ -7,6 +10,7 @@ var stub_target = null var parameters = null var stub_method = null var call_super = false +var call_this = null # Whether this is a stub for default parameter values as they are defined in # the script, and not an overridden default value. var is_script_default = false @@ -29,11 +33,17 @@ var _parameter_override_only = true const NOT_SET = '|_1_this_is_not_set_1_|' -func _init(target=null,method=null,subpath=null): +func _init(target=null, method=null, _subpath=null): stub_target = target stub_method = method - if(typeof(target) == TYPE_STRING): + if(typeof(target) == TYPE_CALLABLE): + stub_target = target.get_object() + stub_method = target.get_method() + parameters = target.get_bound_arguments() + if(parameters.size() == 0): + parameters = null + elif(typeof(target) == TYPE_STRING): if(target.is_absolute_path()): stub_target = load(str(target)) else: @@ -48,6 +58,7 @@ func _init(target=null,method=null,subpath=null): if(typeof(method) == TYPE_DICTIONARY): _load_defaults_from_metadata(method) + func _load_defaults_from_metadata(meta): stub_method = meta.name var values = meta.default_args.duplicate() @@ -56,6 +67,7 @@ func _load_defaults_from_metadata(meta): param_defaults(values) + func to_return(val): if(stub_method == '_init'): _lgr.error("You cannot stub _init to do nothing. Super's _init is always called.") @@ -77,6 +89,11 @@ func to_call_super(): return self +func to_call(callable : Callable): + call_this = callable + return self + + func when_passed(p1=NOT_SET,p2=NOT_SET,p3=NOT_SET,p4=NOT_SET,p5=NOT_SET,p6=NOT_SET,p7=NOT_SET,p8=NOT_SET,p9=NOT_SET,p10=NOT_SET): parameters = [p1,p2,p3,p4,p5,p6,p7,p8,p9,p10] var idx = 0 @@ -104,10 +121,10 @@ func has_param_override(): func is_param_override_only(): - var to_return = false + var ret_val = false if(has_param_override()): - to_return = _parameter_override_only - return to_return + ret_val = _parameter_override_only + return ret_val func to_s(): @@ -124,6 +141,9 @@ func to_s(): if(call_super): base_string += " to call SUPER" + if(call_this != null): + base_string += str(" to call ", call_this) + if(parameters != null): base_string += str(' with params (', parameters, ') returns ', return_val) else: diff --git a/addons/gut/stubber.gd b/addons/gut/stubber.gd index acd111f8..cd735f12 100644 --- a/addons/gut/stubber.gd +++ b/addons/gut/stubber.gd @@ -12,9 +12,8 @@ # } # } var returns = {} -var _utils = load('res://addons/gut/utils.gd').get_instance() -var _lgr = _utils.get_logger() -var _strutils = _utils.Strutils.new() +var _lgr = GutUtils.get_logger() +var _strutils = GutUtils.Strutils.new() var _class_db_name_hash = {} func _init(): @@ -33,7 +32,7 @@ func _make_crazy_dynamic_over_engineered_class_db_hash(): else: text += str('# ', classname, "\n") text += "}" - var inst = _utils.create_script_from_source(text).new() + var inst = GutUtils.create_script_from_source(text).new() return inst.all_the_classes @@ -46,7 +45,7 @@ func _find_matches(obj, method): # an entry for the instance then see if we have an entry for the class. if(returns.has(obj) and returns[obj].has(method)): matches = returns[obj][method] - elif(_utils.is_instance(obj)): + elif(GutUtils.is_instance(obj)): var parent = obj.get_script() var found = false while(parent != null and !found): @@ -174,6 +173,13 @@ func should_call_super(obj, method, parameters=null): return should +func get_call_this(obj, method, parameters=null): + var stub_info = _find_stub(obj, method, parameters) + + if(stub_info != null): + return stub_info.call_this + + func get_parameter_count(obj, method): var to_return = null var stub_info = _find_stub(obj, method, null, true) @@ -225,6 +231,6 @@ func to_s(): func stub_defaults_from_meta(target, method_meta): - var params = _utils.StubParams.new(target, method_meta) + var params = GutUtils.StubParams.new(target, method_meta) params.is_script_default = true add_stub(params) diff --git a/addons/gut/summary.gd b/addons/gut/summary.gd index 8bbf9a40..c037af11 100644 --- a/addons/gut/summary.gd +++ b/addons/gut/summary.gd @@ -21,26 +21,31 @@ func _log_end_run_header(gut): func _log_what_was_run(gut): - if(!gut._utils.is_null_or_empty(gut._select_script)): + if(!GutUtils.is_null_or_empty(gut._select_script)): gut.p('Ran Scripts matching "' + gut._select_script + '"') - if(!gut._utils.is_null_or_empty(gut._unit_test_name)): + if(!GutUtils.is_null_or_empty(gut._unit_test_name)): gut.p('Ran Tests matching "' + gut._unit_test_name + '"') - if(!gut._utils.is_null_or_empty(gut._inner_class_name)): + if(!GutUtils.is_null_or_empty(gut._inner_class_name)): gut.p('Ran Inner Classes matching "' + gut._inner_class_name + '"') func _log_orphans_and_disclaimer(gut): - var orphan_count = gut.get_orphan_counter() var lgr = gut.get_logger() - # Do not count any of the _test_script_objects since these will be released - # when GUT is released. - orphan_count._counters.total += gut._test_script_objects.size() - if(orphan_count.get_counter('total') > 0 and lgr.is_type_enabled('orphan')): - orphan_count.print_orphans('total', lgr) + if(!lgr.is_type_enabled('orphan')): + return + + var counter = gut.get_orphan_counter() + # Do not count any of the test scripts since these will be released when GUT + # is released. + var do_not_count_orphans = counter.get_count("pre_run") + gut.get_test_script_count() + var total_run_orphans = counter.orphan_count() - do_not_count_orphans + + if(total_run_orphans > 0): + lgr.orphan(str("Total orphans in run ", total_run_orphans)) gut.p("Note: This count does not include GUT objects that will be freed upon exit.") gut.p(" It also does not include any orphans created by global scripts") gut.p(" loaded before tests were ran.") - gut.p(str("Total orphans = ", orphan_count.orphan_count())) + gut.p(str("Total orphans = ", counter.orphan_count())) gut.p('') @@ -58,12 +63,12 @@ func _log_non_zero_total(text, value, lgr): else: return 0 + func _log_totals(gut, totals): var lgr = gut.get_logger() lgr.log() lgr.log("---- Totals ----") - var col1 = 18 var issue_count = 0 issue_count += _log_non_zero_total('Errors', totals.errors, lgr) issue_count += _log_non_zero_total('Warnings', totals.warnings, lgr) @@ -82,6 +87,12 @@ func _log_totals(gut, totals): return totals +func _log_nothing_run(gut): + var lgr = gut.get_logger() + lgr.error("Nothing was run.") + lgr.log('On the one hand nothing failed, on the other hand nothing did anything.') + + # --------------------- # Public # --------------------- @@ -186,10 +197,12 @@ func get_totals(gut=_gut): func log_end_run(gut=_gut): - _log_end_run_header(gut) - var totals = get_totals(gut) - var tc = gut.get_test_collector() + if(totals.tests == 0): + _log_nothing_run(gut) + return + + _log_end_run_header(gut) var lgr = gut.get_logger() log_all_non_passing_tests(gut) diff --git a/addons/gut/test.gd b/addons/gut/test.gd index 3eeae5ea..c1f34634 100644 --- a/addons/gut/test.gd +++ b/addons/gut/test.gd @@ -31,22 +31,19 @@ class_name GutTest # # Version - see gut.gd # ############################################################################## -# Class that all test scripts must extend. +# Class that all test scripts must extend.` # # This provides all the asserts and other testing features. Test scripts are # run by the Gut class in gut.gd # ############################################################################## extends Node - -var _utils = load('res://addons/gut/utils.gd').get_instance() -var _compare = _utils.Comparator.new() +var _compare = GutUtils.Comparator.new() # Need a reference to the instance that is running the tests. This -# is set by the gut class when it runs the tests. This gets you -# access to the asserts in the tests you write. -var gut = null +# is set by the gut class when it runs the test script. +var gut: GutMain = null var _disable_strict_datatype_checks = false # Holds all the text for a test's fail/pass. This is used for testing purposes @@ -68,26 +65,47 @@ var _summary = { # This is used to watch signals so we can make assertions about them. var _signal_watcher = load('res://addons/gut/signal_watcher.gd').new() -# Convenience copy of _utils.DOUBLE_STRATEGY +# Convenience copy of GutUtils.DOUBLE_STRATEGY var DOUBLE_STRATEGY = GutUtils.DOUBLE_STRATEGY -var _lgr = _utils.get_logger() -var _strutils = _utils.Strutils.new() +var _lgr = GutUtils.get_logger() +var _strutils = GutUtils.Strutils.new() +var _awaiter = null # syntax sugar -var ParameterFactory = _utils.ParameterFactory -var CompareResult = _utils.CompareResult -var InputFactory = _utils.InputFactory -var InputSender = _utils.InputSender +var ParameterFactory = GutUtils.ParameterFactory +var CompareResult = GutUtils.CompareResult +var InputFactory = GutUtils.InputFactory +var InputSender = GutUtils.InputSender -func _init(): - pass + +var _was_ready_called = false +# I haven't decided if we should be using _ready or not. Right now gut.gd will +# call this if _ready was not called (because it was overridden without a super +# call). Maybe gut.gd should just call _do_ready_stuff (after we rename it to +# something better). I'm leaving all this as it is until it bothers me more. +func _do_ready_stuff(): + _awaiter = GutUtils.Awaiter.new() + add_child(_awaiter) + _was_ready_called = true + + +func _ready(): + _do_ready_stuff() + + +func _notification(what): + # Tests are never expected to re-enter the tree. Tests are removed from the + # tree after they are run. + if(what == NOTIFICATION_EXIT_TREE): + _awaiter.queue_free() func _str(thing): return _strutils.type2str(thing) + func _str_precision(value, precision): var to_return = _str(value) var format = str('%.', precision, 'f') @@ -210,7 +228,7 @@ func _fail_if_parameters_not_array(parameters): func _get_bad_double_or_method_message(inst, method_name, what_you_cant_do): var to_return = '' - if(!_utils.is_double(inst)): + if(!GutUtils.is_double(inst)): to_return = str("An instance of a Double was expected, you passed: ", _str(inst)) elif(!inst.has_method(method_name)): to_return = str("You cannot ", what_you_cant_do, " [", method_name, "] because the method does not exist. ", @@ -255,19 +273,22 @@ func _create_obj_from_type(type): # Virtual Methods # ####################### -# alias for prerun_setup +func should_skip_script(): + return false + + func before_all(): pass -# alias for setup + func before_each(): pass -# alias for postrun_teardown + func after_all(): pass -# alias for teardown + func after_each(): pass @@ -380,6 +401,17 @@ func assert_gt(got, expected, text=""): else: _fail(disp) +# ------------------------------------------------------------------------------ +# Asserts got is greater than or equal to expected +# ------------------------------------------------------------------------------ +func assert_gte(got, expected, text=""): + var disp = "[" + _str(got) + "] expected to be >= than [" + _str(expected) + "]: " + text + if(_do_datatypes_match__fail_if_not(got, expected, text)): + if(got >= expected): + _pass(disp) + else: + _fail(disp) + # ------------------------------------------------------------------------------ # Asserts got is less than expected # ------------------------------------------------------------------------------ @@ -391,6 +423,17 @@ func assert_lt(got, expected, text=""): else: _fail(disp) +# ------------------------------------------------------------------------------ +# Asserts got is less than or equal to expected +# ------------------------------------------------------------------------------ +func assert_lte(got, expected, text=""): + var disp = "[" + _str(got) + "] expected to be <= than [" + _str(expected) + "]: " + text + if(_do_datatypes_match__fail_if_not(got, expected, text)): + if(got <= expected): + _pass(disp) + else: + _fail(disp) + # ------------------------------------------------------------------------------ # asserts that got is true # ------------------------------------------------------------------------------ @@ -757,7 +800,7 @@ func get_signal_parameters(object, signal_name, index=-1): # ------------------------------------------------------------------------------ func get_call_parameters(object, method_name, index=-1): var to_return = null - if(_utils.is_double(object)): + if(GutUtils.is_double(object)): to_return = gut.get_spy().get_call_parameters(object, method_name, index) else: _lgr.error('You must pass a doulbed object to get_call_parameters.') @@ -787,7 +830,7 @@ func assert_is(object, a_class, text=''): else: var a_str = _str(a_class) disp = str('Expected [', _str(object), '] to extend [', a_str, ']: ', text) - if(!_utils.is_native_class(a_class) and !_utils.is_gdscript(a_class)): + if(!GutUtils.is_native_class(a_class) and !GutUtils.is_gdscript(a_class)): _fail(str(bad_param_2, a_str)) else: if(is_instance_of(object, a_class)): @@ -834,10 +877,13 @@ func assert_not_typeof(object, type, text=''): # The match_case flag determines case sensitivity. # ------------------------------------------------------------------------------ func assert_string_contains(text, search, match_case=true): - var empty_search = 'Expected text and search strings to be non-empty. You passed \'%s\' and \'%s\'.' + const empty_search = 'Expected text and search strings to be non-empty. You passed %s and %s.' + const non_strings = 'Expected text and search to both be strings. You passed %s and %s.' var disp = 'Expected \'%s\' to contain \'%s\', match_case=%s' % [text, search, match_case] - if(text == '' or search == ''): - _fail(empty_search % [text, search]) + if(typeof(text) != TYPE_STRING or typeof(search) != TYPE_STRING): + _fail(non_strings % [_str(text), _str(search)]) + elif(text == '' or search == ''): + _fail(empty_search % [_str(text), _str(search)]) elif(match_case): if(text.find(search) == -1): _fail(disp) @@ -1000,7 +1046,7 @@ func assert_not_freed(obj, title): # the last thing your test does. # ------------------------------------------------------------------------------ func assert_no_new_orphans(text=''): - var count = gut.get_orphan_counter().get_counter('test') + var count = gut.get_orphan_counter().get_orphans_since('test') var msg = '' if(text != ''): msg = ': ' + text @@ -1143,7 +1189,6 @@ func assert_property(obj, property_name, default_value, new_value) -> void: _warn_for_public_accessors(obj, property_name) - # ------------------------------------------------------------------------------ # Mark the current test as pending. # ------------------------------------------------------------------------------ @@ -1159,29 +1204,30 @@ func pending(text=""): # Gut detects the yield. # ------------------------------------------------------------------------------ func wait_seconds(time, msg=''): - var to_return = gut.set_wait_time(time, msg) - return to_return + _lgr.yield_msg(str('-- Awaiting ', time, ' second(s) -- ', msg)) + _awaiter.wait_seconds(time) + return _awaiter.timeout func yield_for(time, msg=''): _lgr.deprecated('yield_for', 'wait_seconds') - var to_return = gut.set_wait_time(time, msg) - return to_return + return wait_seconds(time, msg) # ------------------------------------------------------------------------------ # Yield to a signal or a maximum amount of time, whichever comes first. # ------------------------------------------------------------------------------ -func wait_for_signal(sig, max_wait, msg=''): +func wait_for_signal(sig : Signal, max_wait, msg=''): watch_signals(sig.get_object()) - var to_return = gut.set_wait_for_signal_or_time(sig.get_object(), sig.get_name(), max_wait, msg) - return to_return + _lgr.yield_msg(str('-- Awaiting signal "', sig.get_name(), '" or for ', max_wait, ' second(s) -- ', msg)) + _awaiter.wait_for_signal(sig, max_wait) + await _awaiter.timeout + return !_awaiter.did_last_wait_timeout func yield_to(obj, signal_name, max_wait, msg=''): _lgr.deprecated('yield_to', 'wait_for_signal') - watch_signals(obj) - var to_return = gut.set_wait_for_signal_or_time(obj, signal_name, max_wait, msg) - return to_return + return await wait_for_signal(Signal(obj, signal_name), max_wait, msg) + # ------------------------------------------------------------------------------ # Yield for a number of frames. The optional message will be printed. when @@ -1193,14 +1239,35 @@ func wait_frames(frames, msg=''): _lgr.error(text) frames = 1 - var to_return = gut.set_wait_frames(frames, msg) - return to_return + _lgr.yield_msg(str('-- Awaiting ', frames, ' frame(s) -- ', msg)) + _awaiter.wait_frames(frames) + return _awaiter.timeout + +# p3 can be the optional message or an amount of time to wait between tests. +# p4 is the optional message if you have specified an amount of time to +# wait between tests. +func wait_until(callable, max_wait, p3='', p4=''): + var time_between = 0.0 + var message = p4 + if(typeof(p3) != TYPE_STRING): + time_between = p3 + else: + message = p3 + + _lgr.yield_msg(str("--Awaiting callable to return TRUE or ", max_wait, "s. ", message)) + _awaiter.wait_until(callable, max_wait, time_between) + await _awaiter.timeout + return !_awaiter.did_last_wait_timeout + + +func did_wait_timeout(): + return _awaiter.did_last_wait_timeout func yield_frames(frames, msg=''): _lgr.deprecated("yield_frames", "wait_frames") - var to_return = wait_frames(frames, msg) - return to_return + return wait_frames(frames, msg) + func get_summary(): return _summary @@ -1259,7 +1326,7 @@ func _smart_double(thing, double_strat, partial): else: to_return = gut.get_doubler().double_scene(thing, override_strat) - elif(_utils.is_native_class(thing)): + elif(GutUtils.is_native_class(thing)): if(partial): to_return = gut.get_doubler().partial_double_gdnative(thing) else: @@ -1286,7 +1353,7 @@ func _are_double_parameters_valid(thing, p2, p3): if(typeof(thing) == TYPE_STRING): bad_msg += "Doubling using the path to a script or scene is no longer supported. Load the script or scene and pass that to double instead.\n" - if(_utils.is_instance(thing)): + if(GutUtils.is_instance(thing)): bad_msg += "double requires a script, you passed an instance: " + _str(thing) if(bad_msg != ""): @@ -1381,27 +1448,36 @@ func ignore_method_when_doubling(thing, method_name): # Stub something. # # Parameters -# 1: the thing to stub, a file path or an instance or a class +# 1: A callable OR the thing to stub OR a file path OR an instance OR a Script # 2: either an inner class subpath or the method name # 3: the method name if an inner class subpath was specified # NOTE: right now we cannot stub inner classes at the path level so this should # only be called with two parameters. I did the work though so I'm going # to leave it but not update the wiki. # ------------------------------------------------------------------------------ -func stub(thing, p2, p3=null): +func stub(thing, p2=null, p3=null): var method_name = p2 var subpath = null + if(p3 != null): subpath = p2 method_name = p3 - if(_utils.is_instance(thing)): + if(GutUtils.is_instance(thing)): var msg = _get_bad_double_or_method_message(thing, method_name, 'stub') if(msg != ''): _lgr.error(msg) - return _utils.StubParams.new() + return GutUtils.StubParams.new() + + var sp = null + if(typeof(thing) == TYPE_CALLABLE): + if(p2 != null or p3 != null): + _lgr.error("Only one parameter expected when using a callable.") + sp = GutUtils.StubParams.new(thing) + else: + sp = GutUtils.StubParams.new(thing, method_name, subpath) - var sp = _utils.StubParams.new(thing, method_name, subpath) + sp.logger = _lgr gut.get_stubber().add_stub(sp) return sp @@ -1461,7 +1537,7 @@ func replace_node(base_node, path_or_node, with_this): func use_parameters(params): var ph = gut.parameter_handler if(ph == null): - ph = _utils.ParameterHandler.new(params) + ph = GutUtils.ParameterHandler.new(params) gut.parameter_handler = ph # DO NOT use gut.gd's get_call_count_text here since it decrements the @@ -1472,6 +1548,31 @@ func use_parameters(params): return ph.next_parameters() + +# ------------------------------------------------------------------------------ +# When used as the default for a test method parameter, it will cause the test +# to be run x times. +# +# I Hacked this together to test a method that was occassionally failing due to +# timing issues. I don't think it's a great idea, but you be the judge. +# ------------------------------------------------------------------------------ +func run_x_times(x): + var ph = gut.parameter_handler + if(ph == null): + _lgr.warn( + str("This test uses run_x_times and you really should not be ", + "using it. I don't think it's a good thing, but I did find it ", + "temporarily useful so I left it in here and didn't document it. ", + "Well, you found it, might as well open up an issue and let me ", + "know why you're doing this.")) + var params = [] + for i in range(x): + params.append(i) + + ph = GutUtils.ParameterHandler.new(params) + gut.parameter_handler = ph + return ph.next_parameters() + # ------------------------------------------------------------------------------ # Marks whatever is passed in to be freed after the test finishes. It also # returns what is passed in so you can save a line of code. @@ -1627,9 +1728,9 @@ func assert_not_same(v1, v2, text=''): # return # ------------------------------------------------------------------------------ func skip_if_godot_version_lt(expected): - var should_skip = !_utils.is_godot_version_gte(expected) + var should_skip = !GutUtils.is_godot_version_gte(expected) if(should_skip): - _pass(str('Skipping ', _utils.godot_version(), ' is less than ', expected)) + _pass(str('Skipping: ', GutUtils.godot_version_string(), ' is less than ', expected)) return should_skip @@ -1644,9 +1745,9 @@ func skip_if_godot_version_lt(expected): # return # ------------------------------------------------------------------------------ func skip_if_godot_version_ne(expected): - var should_skip = !_utils.is_godot_version(expected) + var should_skip = !GutUtils.is_godot_version(expected) if(should_skip): - _pass(str('Skipping ', _utils.godot_version(), ' is not ', expected)) + _pass(str('Skipping: ', GutUtils.godot_version_string(), ' is not ', expected)) return should_skip diff --git a/addons/gut/test_collector.gd b/addons/gut/test_collector.gd index 7e7337e9..b0047585 100644 --- a/addons/gut/test_collector.gd +++ b/addons/gut/test_collector.gd @@ -5,13 +5,13 @@ # # This also handles exporting and importing tests. # ------------------------------------------------------------------------------ -var CollectedScript = load('res://addons/gut/collected_script.gd') -var CollectedTest = load('res://addons/gut/collected_test.gd') +var CollectedScript = GutUtils.CollectedScript +var CollectedTest = GutUtils.CollectedTest var _test_prefix = 'test_' var _test_class_prefix = 'Test' -var _utils = load('res://addons/gut/utils.gd').get_instance() -var _lgr = _utils.get_logger() + +var _lgr = GutUtils.get_logger() # Array of CollectedScripts. @@ -52,7 +52,7 @@ func _get_inner_test_class_names(loaded): var const_map = loaded.get_script_constant_map() for key in const_map: var thing = const_map[key] - if(_utils.is_gdscript(thing)): + if(GutUtils.is_gdscript(thing)): if(key.begins_with(_test_class_prefix)): if(_does_inherit_from_test(thing)): inner_classes.append(key) @@ -72,7 +72,10 @@ func _parse_script(test_script): var inner_classes = [] var scripts_found = [] - var loaded = load(test_script.path) + var loaded = GutUtils.WarningsManager.load_script_using_custom_warnings( + test_script.path, + GutUtils.warnings_when_loading_test_scripts) + if(_does_inherit_from_test(loaded)): _populate_tests(test_script) scripts_found.append(test_script.path) @@ -83,7 +86,7 @@ func _parse_script(test_script): for i in range(inner_classes.size()): var loaded_inner = loaded.get(inner_classes[i]) if(_does_inherit_from_test(loaded_inner)): - var ts = CollectedScript.new(_utils, _lgr) + var ts = CollectedScript.new(_lgr) ts.path = test_script.path ts.inner_class_name = inner_classes[i] _populate_tests(ts) @@ -103,10 +106,16 @@ func add_script(path): # SHORTCIRCUIT if(!FileAccess.file_exists(path)): - _lgr.error('Could not find script: ' + path) - return + # This check was added so tests could create dynmaic scripts and add + # them to be run through gut. This helps cut down on creating test + # scripts to be used in test/resources. + if(ResourceLoader.has_cached(path)): + _lgr.debug("Using cached version of " + path) + else: + _lgr.error('Could not find script: ' + path) + return - var ts = CollectedScript.new(_utils, _lgr) + var ts = CollectedScript.new(_lgr) ts.path = path # Append right away because if we don't test_doubler.gd.TestInitParameters # will HARD crash. I couldn't figure out what was causing the issue but @@ -159,7 +168,7 @@ func import_tests(path): else: var sections = f.get_sections() for key in sections: - var ts = CollectedScript.new(_utils, _lgr) + var ts = CollectedScript.new(_lgr) ts.import_from(f, key) _populate_tests(ts) scripts.append(ts) @@ -168,7 +177,7 @@ func import_tests(path): func get_script_named(name): - return _utils.search_array(scripts, 'get_filename_and_inner', name) + return GutUtils.search_array(scripts, 'get_filename_and_inner', name) func get_test_named(script_name, test_name): diff --git a/addons/gut/thing_counter.gd b/addons/gut/thing_counter.gd index a9b0b489..40e71ef9 100644 --- a/addons/gut/thing_counter.gd +++ b/addons/gut/thing_counter.gd @@ -3,26 +3,36 @@ var things = {} func get_unique_count(): return things.size() + +func add_thing_to_count(thing): + if(!things.has(thing)): + things[thing] = 0 + + func add(thing): if(things.has(thing)): things[thing] += 1 else: things[thing] = 1 + func has(thing): return things.has(thing) -func get(thing): + +func count(thing): var to_return = 0 if(things.has(thing)): to_return = things[thing] return to_return + func sum(): - var count = 0 + var to_return = 0 for key in things: - count += things[key] - return count + to_return += things[key] + return to_return + func to_s(): var to_return = "" @@ -31,6 +41,7 @@ func to_s(): to_return += str("sum: ", sum()) return to_return + func get_max_count(): var max_val = null for key in things: @@ -38,6 +49,7 @@ func get_max_count(): max_val = things[key] return max_val + func add_array_items(array): for i in range(array.size()): add(array[i]) diff --git a/addons/gut/utils.gd b/addons/gut/utils.gd index df0c7b08..6580670e 100644 --- a/addons/gut/utils.gd +++ b/addons/gut/utils.gd @@ -1,18 +1,8 @@ @tool class_name GutUtils extends Object -# ------------------------------------------------------------------------------ -# Description -# ----------- -# This class is a PSUEDO SINGLETON. You should not make instances of it but use -# the get_instance static method. -# ------------------------------------------------------------------------------ -# NOTE: I think this can become completely static now that we have static -# variables. A lot would have to change though. But it would be good -# to do. -# ------------------------------------------------------------------------------ -const GUT_METADATA = '__gutdbl' +const GUT_METADATA = '__gutdbl' # Note, these cannot change since places are checking for TYPE_INT to determine # how to process parameters. @@ -21,7 +11,6 @@ enum DOUBLE_STRATEGY{ SCRIPT_ONLY, } - enum DIFF { DEEP, SIMPLE @@ -38,37 +27,213 @@ const TEST_STATUSES = { PASSED = 'pass' } +const DOUBLE_TEMPLATES = { + FUNCTION = 'res://addons/gut/double_templates/function_template.txt', + INIT = 'res://addons/gut/double_templates/init_template.txt', + SCRIPT = 'res://addons/gut/double_templates/script_template.txt', +} + + +static var GutScene = load('res://addons/gut/GutScene.tscn') +static var LazyLoader = load('res://addons/gut/lazy_loader.gd') +static var VersionNumbers = load("res://addons/gut/version_numbers.gd") +static var WarningsManager = load("res://addons/gut/warnings_manager.gd") +# -------------------------------- +# Lazy loaded scripts. These scripts are lazy loaded so that they can be +# declared, but will not load when this script is loaded. This gives us a +# window at the start of a run to adjust warning levels prior to loading +# everything. +# -------------------------------- +static var AutoFree = LazyLoader.new('res://addons/gut/autofree.gd'): + get: return AutoFree.get_loaded() + set(val): pass +static var Awaiter = LazyLoader.new('res://addons/gut/awaiter.gd'): + get: return Awaiter.get_loaded() + set(val): pass +static var Comparator = LazyLoader.new('res://addons/gut/comparator.gd'): + get: return Comparator.get_loaded() + set(val): pass +static var CollectedTest = LazyLoader.new('res://addons/gut/collected_test.gd'): + get: return CollectedTest.get_loaded() + set(val): pass +static var CollectedScript = LazyLoader.new('res://addons/gut/collected_script.gd'): + get: return CollectedScript.get_loaded() + set(val): pass +static var CompareResult = LazyLoader.new('res://addons/gut/compare_result.gd'): + get: return CompareResult.get_loaded() + set(val): pass +static var DiffTool = LazyLoader.new('res://addons/gut/diff_tool.gd'): + get: return DiffTool.get_loaded() + set(val): pass +static var Doubler = LazyLoader.new('res://addons/gut/doubler.gd'): + get: return Doubler.get_loaded() + set(val): pass +static var DynamicGdScript = LazyLoader.new("res://addons/gut/dynamic_gdscript.gd") : + get: return DynamicGdScript.get_loaded() + set(val): pass +static var Gut = LazyLoader.new('res://addons/gut/gut.gd'): + get: return Gut.get_loaded() + set(val): pass +static var GutConfig = LazyLoader.new('res://addons/gut/gut_config.gd'): + get: return GutConfig.get_loaded() + set(val): pass +static var HookScript = LazyLoader.new('res://addons/gut/hook_script.gd'): + get: return HookScript.get_loaded() + set(val): pass +static var InnerClassRegistry = LazyLoader.new('res://addons/gut/inner_class_registry.gd'): + get: return InnerClassRegistry.get_loaded() + set(val): pass +static var InputFactory = LazyLoader.new("res://addons/gut/input_factory.gd"): + get: return InputFactory.get_loaded() + set(val): pass +static var InputSender = LazyLoader.new("res://addons/gut/input_sender.gd"): + get: return InputSender.get_loaded() + set(val): pass +static var JunitXmlExport = LazyLoader.new('res://addons/gut/junit_xml_export.gd'): + get: return JunitXmlExport.get_loaded() + set(val): pass +static var Logger = LazyLoader.new('res://addons/gut/logger.gd') : # everything should use get_logger + get: return Logger.get_loaded() + set(val): pass +static var MethodMaker = LazyLoader.new('res://addons/gut/method_maker.gd'): + get: return MethodMaker.get_loaded() + set(val): pass +static var OneToMany = LazyLoader.new('res://addons/gut/one_to_many.gd'): + get: return OneToMany.get_loaded() + set(val): pass +static var OrphanCounter = LazyLoader.new('res://addons/gut/orphan_counter.gd'): + get: return OrphanCounter.get_loaded() + set(val): pass +static var ParameterFactory = LazyLoader.new('res://addons/gut/parameter_factory.gd'): + get: return ParameterFactory.get_loaded() + set(val): pass +static var ParameterHandler = LazyLoader.new('res://addons/gut/parameter_handler.gd'): + get: return ParameterHandler.get_loaded() + set(val): pass +static var Printers = LazyLoader.new('res://addons/gut/printers.gd'): + get: return Printers.get_loaded() + set(val): pass +static var ResultExporter = LazyLoader.new('res://addons/gut/result_exporter.gd'): + get: return ResultExporter.get_loaded() + set(val): pass +static var ScriptCollector = LazyLoader.new('res://addons/gut/script_parser.gd'): + get: return ScriptCollector.get_loaded() + set(val): pass +static var Spy = LazyLoader.new('res://addons/gut/spy.gd'): + get: return Spy.get_loaded() + set(val): pass +static var Strutils = LazyLoader.new('res://addons/gut/strutils.gd'): + get: return Strutils.get_loaded() + set(val): pass +static var Stubber = LazyLoader.new('res://addons/gut/stubber.gd'): + get: return Stubber.get_loaded() + set(val): pass +static var StubParams = LazyLoader.new('res://addons/gut/stub_params.gd'): + get: return StubParams.get_loaded() + set(val): pass +static var Summary = LazyLoader.new('res://addons/gut/summary.gd'): + get: return Summary.get_loaded() + set(val): pass +static var Test = LazyLoader.new('res://addons/gut/test.gd'): + get: return Test.get_loaded() + set(val): pass +static var TestCollector = LazyLoader.new('res://addons/gut/test_collector.gd'): + get: return TestCollector.get_loaded() + set(val): pass +static var ThingCounter = LazyLoader.new('res://addons/gut/thing_counter.gd'): + get: return ThingCounter.get_loaded() + set(val): pass +# -------------------------------- + static var avail_fonts = ['AnonymousPro', 'CourierPrime', 'LobsterTwo', 'Default'] +static var version_numbers = VersionNumbers.new( + # gut_versrion (source of truth) + '9.3.0', + # required_godot_version + '4.2.0' +) + + +static var warnings_at_start := { # WarningsManager dictionary + exclude_addons = true +} -# This is a holdover from when GUT was making a psuedo autoload. It would add -# an instance of this class to the tree with a name and retrieve it when -# get_instance was called. We now have static variables so this var is now -# used instead of a node. -static var _the_instance = null +static var warnings_when_loading_test_scripts := { # WarningsManager dictionary + enable = false +} # ------------------------------------------------------------------------------ -# Gets the root node without having to be in the tree and pushing out an error -# if we don't have a main loop ready to go yet. +# Everything should get a logger through this. +# +# When running in test mode this will always return a new logger so that errors +# are not caused by getting bad warn/error/etc counts. # ------------------------------------------------------------------------------ -static func get_root_node(): - var main_loop = Engine.get_main_loop() - if(main_loop != null): - return main_loop.root +static var _test_mode = false +static var _lgr = null +static func get_logger(): + if(_test_mode): + return Logger.new() else: - push_error('No Main Loop Yet') - return null + if(_lgr == null): + _lgr = Logger.new() + return _lgr + + +static var _dyn_gdscript = DynamicGdScript.new() +static func create_script_from_source(source, override_path=null): + var DynamicScript = _dyn_gdscript.create_script_from_source(source, override_path) + + if(typeof(DynamicScript) == TYPE_INT): + var l = get_logger() + l.error(str('Could not create script from source. Error: ', DynamicScript)) + l.info(str("Source Code:\n", add_line_numbers(source))) + + return DynamicScript + + +static func godot_version_string(): + return version_numbers.make_godot_version_string() + + +static func is_godot_version(expected): + return VersionNumbers.VerNumTools.is_godot_version_eq(expected) + + +static func is_godot_version_gte(expected): + return VersionNumbers.VerNumTools.is_godot_version_gte(expected) + + +const INSTALL_OK_TEXT = 'Everything checks out' +static func make_install_check_text(template_paths=DOUBLE_TEMPLATES, ver_nums=version_numbers): + var text = INSTALL_OK_TEXT + if(!FileAccess.file_exists(template_paths.FUNCTION) or + !FileAccess.file_exists(template_paths.INIT) or + !FileAccess.file_exists(template_paths.SCRIPT)): + + text = 'One or more GUT template files are missing. If this is an exported project, you must include *.txt files in the export to run GUT. If it is not an exported project then reinstall GUT.' + elif(!ver_nums.is_godot_version_valid()): + text = ver_nums.get_bad_version_text() + + return text + + +static func is_install_valid(template_paths=DOUBLE_TEMPLATES, ver_nums=version_numbers): + return make_install_check_text(template_paths, ver_nums) == INSTALL_OK_TEXT # ------------------------------------------------------------------------------ -# Get the ONE instance of utils +# Gets the root node without having to be in the tree and pushing out an error +# if we don't have a main loop ready to go yet. # ------------------------------------------------------------------------------ -static func get_instance(): - if(_the_instance == null): - _the_instance = GutUtils.new() - - return _the_instance +# static func get_root_node(): +# var main_loop = Engine.get_main_loop() +# if(main_loop != null): +# return main_loop.root +# else: +# push_error('No Main Loop Yet') +# return null # ------------------------------------------------------------------------------ @@ -119,8 +284,8 @@ static func nvl(value, if_null): # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ -static func pretty_print(dict): - print(JSON.stringify(dict, ' ')) +static func pretty_print(dict, indent = ' '): + print(JSON.stringify(dict, indent)) # ------------------------------------------------------------------------------ @@ -164,136 +329,6 @@ static func get_scene_script_object(scene): return to_return -# ############################################################################## -# Start Class -# ############################################################################## -var Logger = load('res://addons/gut/logger.gd') # everything should use get_logger -var _lgr = null -var json = JSON.new() - -var _test_mode = false - -var AutoFree = load('res://addons/gut/autofree.gd') -var Awaiter = load('res://addons/gut/awaiter.gd') -var Comparator = load('res://addons/gut/comparator.gd') -var CompareResult = load('res://addons/gut/compare_result.gd') -var DiffTool = load('res://addons/gut/diff_tool.gd') -var Doubler = load('res://addons/gut/doubler.gd') -var Gut = load('res://addons/gut/gut.gd') -var GutConfig = load('res://addons/gut/gut_config.gd') -var HookScript = load('res://addons/gut/hook_script.gd') -var InnerClassRegistry = load('res://addons/gut/inner_class_registry.gd') -var InputFactory = load("res://addons/gut/input_factory.gd") -var InputSender = load("res://addons/gut/input_sender.gd") -var JunitXmlExport = load('res://addons/gut/junit_xml_export.gd') -var MethodMaker = load('res://addons/gut/method_maker.gd') -var OneToMany = load('res://addons/gut/one_to_many.gd') -var OrphanCounter = load('res://addons/gut/orphan_counter.gd') -var ParameterFactory = load('res://addons/gut/parameter_factory.gd') -var ParameterHandler = load('res://addons/gut/parameter_handler.gd') -var Printers = load('res://addons/gut/printers.gd') -var ResultExporter = load('res://addons/gut/result_exporter.gd') -var ScriptCollector = load('res://addons/gut/script_parser.gd') -var Spy = load('res://addons/gut/spy.gd') -var Strutils = load('res://addons/gut/strutils.gd') -var Stubber = load('res://addons/gut/stubber.gd') -var StubParams = load('res://addons/gut/stub_params.gd') -var Summary = load('res://addons/gut/summary.gd') -var Test = load('res://addons/gut/test.gd') -var TestCollector = load('res://addons/gut/test_collector.gd') -var ThingCounter = load('res://addons/gut/thing_counter.gd') -var CollectedTest = load('res://addons/gut/collected_test.gd') -var CollectedScript = load('res://addons/gut/collected_test.gd') - -var GutScene = load('res://addons/gut/GutScene.tscn') - -# Source of truth for the GUT version -var version = '9.2.1' -# The required Godot version as an array. -var req_godot = [4, 2, 0] - - -# ------------------------------------------------------------------------------ -# Blurb of text with GUT and Godot versions. -# ------------------------------------------------------------------------------ -func get_version_text(): - var v_info = Engine.get_version_info() - var gut_version_info = str('GUT version: ', version) - var godot_version_info = str('Godot version: ', v_info.major, '.', v_info.minor, '.', v_info.patch) - return godot_version_info + "\n" + gut_version_info - - -# ------------------------------------------------------------------------------ -# Returns a nice string for erroring out when we have a bad Godot version. -# ------------------------------------------------------------------------------ -func get_bad_version_text(): - var ver = '.'.join(PackedStringArray(req_godot)) - var info = Engine.get_version_info() - var gd_version = str(info.major, '.', info.minor, '.', info.patch) - return 'GUT ' + version + ' requires Godot ' + ver + ' or greater. Godot version is ' + gd_version - - -# ------------------------------------------------------------------------------ -# Checks the Godot version against req_godot array. -# ------------------------------------------------------------------------------ -func is_version_ok(engine_info=Engine.get_version_info(),required=req_godot): - var is_ok = null - var engine_array = [engine_info.major, engine_info.minor, engine_info.patch] - - var idx = 0 - while(is_ok == null and idx < engine_array.size()): - if(engine_array[idx] > required[idx]): - is_ok = true - elif(engine_array[idx] < required[idx]): - is_ok = false - - idx += 1 - - # still null means each index was the same. - return nvl(is_ok, true) - - -func godot_version(engine_info=Engine.get_version_info()): - return str(engine_info.major, '.', engine_info.minor, '.', engine_info.patch) - - -func is_godot_version(expected, engine_info=Engine.get_version_info()): - var engine_array = [engine_info.major, engine_info.minor, engine_info.patch] - var expected_array = expected.split('.') - - if(expected_array.size() > engine_array.size()): - return false - - var is_version = true - var i = 0 - while(i < expected_array.size() and i < engine_array.size() and is_version): - if(expected_array[i] == str(engine_array[i])): - i += 1 - else: - is_version = false - - return is_version - - -func is_godot_version_gte(expected, engine_info=Engine.get_version_info()): - return is_version_ok(engine_info, expected.split('.')) - - -# ------------------------------------------------------------------------------ -# Everything should get a logger through this. -# -# When running in test mode this will always return a new logger so that errors -# are not caused by getting bad warn/error/etc counts. -# ------------------------------------------------------------------------------ -func get_logger(): - if(_test_mode): - return Logger.new() - else: - if(_lgr == null): - _lgr = Logger.new() - return _lgr - - # ------------------------------------------------------------------------------ # returns true if the object has been freed, false if not # @@ -301,7 +336,7 @@ func get_logger(): # of the time but sometimes it does not catch it. The str comparison seems to # fill in the gaps. I've not seen any errors after adding that check. # ------------------------------------------------------------------------------ -func is_freed(obj): +static func is_freed(obj): var wr = weakref(obj) return !(wr.get_ref() and str(obj) != '') @@ -309,30 +344,44 @@ func is_freed(obj): # ------------------------------------------------------------------------------ # Pretty self explanitory. # ------------------------------------------------------------------------------ -func is_not_freed(obj): +static func is_not_freed(obj): return !is_freed(obj) # ------------------------------------------------------------------------------ # Checks if the passed in object is a GUT Double or Partial Double. # ------------------------------------------------------------------------------ -func is_double(obj): +static func is_double(obj): var to_return = false if(typeof(obj) == TYPE_OBJECT and is_instance_valid(obj)): to_return = obj.has_method('__gutdbl_check_method__') return to_return +# ------------------------------------------------------------------------------ +# Checks an object to see if it is a GDScriptNativeClass +# ------------------------------------------------------------------------------ +static func is_native_class(thing): + var it_is = false + if(typeof(thing) == TYPE_OBJECT): + it_is = str(thing).begins_with(" r[idx]): + is_ok = true + elif(v[idx] < r[idx]): + is_ok = false + + idx += 1 + + # still null means each index was the same. + return GutUtils.nvl(is_ok, true) + + + static func is_version_eq(version, expected): + var version_array = make_version_array(version) + var expected_array = make_version_array(expected) + + if(expected_array.size() > version_array.size()): + return false + + var is_version = true + var i = 0 + while(i < expected_array.size() and i < version_array.size() and is_version): + if(expected_array[i] == version_array[i]): + i += 1 + else: + is_version = false + + return is_version + + + static func is_godot_version_eq(expected): + return VerNumTools.is_version_eq(Engine.get_version_info(), expected) + + + static func is_godot_version_gte(expected): + return VerNumTools.is_version_gte(Engine.get_version_info(), expected) + + + + +# ############################################################################## +# +# ############################################################################## +var gut_version = '0.0.0' +var required_godot_version = '0.0.0' + +func _init(gut_v = gut_version, required_godot_v = required_godot_version): + gut_version = gut_v + required_godot_version = required_godot_v + + +# ------------------------------------------------------------------------------ +# Blurb of text with GUT and Godot versions. +# ------------------------------------------------------------------------------ +func get_version_text(): + var v_info = Engine.get_version_info() + var gut_version_info = str('GUT version: ', gut_version) + var godot_version_info = str('Godot version: ', v_info.major, '.', v_info.minor, '.', v_info.patch) + return godot_version_info + "\n" + gut_version_info + + +# ------------------------------------------------------------------------------ +# Returns a nice string for erroring out when we have a bad Godot version. +# ------------------------------------------------------------------------------ +func get_bad_version_text(): + var info = Engine.get_version_info() + var gd_version = str(info.major, '.', info.minor, '.', info.patch) + return 'GUT ' + gut_version + ' requires Godot ' + required_godot_version + \ + ' or greater. Godot version is ' + gd_version + + +# ------------------------------------------------------------------------------ +# Checks the Godot version against required_godot_version. +# ------------------------------------------------------------------------------ +func is_godot_version_valid(): + return VerNumTools.is_version_gte(Engine.get_version_info(), required_godot_version) + + +func make_godot_version_string(): + return VerNumTools.make_version_string(Engine.get_version_info()) diff --git a/addons/gut/warnings_manager.gd b/addons/gut/warnings_manager.gd new file mode 100644 index 00000000..bfc40461 --- /dev/null +++ b/addons/gut/warnings_manager.gd @@ -0,0 +1,137 @@ +const IGNORE = 0 +const WARN = 1 +const ERROR = 2 + + +const WARNING_LOOKUP = { + IGNORE : 'IGNORE', + WARN : 'WARN', + ERROR : 'ERROR' +} + +const GDSCRIPT_WARNING = 'debug/gdscript/warnings/' + +# --------------------------------------- +# Static +# --------------------------------------- +static var _static_init_called = false +# This is static and set in _static_init so that we can get the current settings as +# soon as possible. +static var _project_warnings : Dictionary = {} +static var project_warnings := {} : + get: + # somehow this gets called before _project_warnings is initialized when + # loading a project in the editor. It causes an error stating that + # duplicate can't be called on nil. It seems there might be an + # implicit "get" call happening. Using push_error I saw a message + # in this method, but not one from _static_init upon loading the project + if(_static_init_called): + return _project_warnings.duplicate() + else: + return {} + set(val): pass + + +static func _static_init(): + _project_warnings = create_warnings_dictionary_from_project_settings() + _static_init_called = true + + +static func are_warnings_enabled(): + return ProjectSettings.get(str(GDSCRIPT_WARNING, 'enable')) + + +## Turn all warnings on/off. Use reset_warnings to restore the original value. +static func enable_warnings(should=true): + ProjectSettings.set(str(GDSCRIPT_WARNING, 'enable'), should) + + +## Turn on/off excluding addons. Use reset_warnings to restore the original value. +static func exclude_addons(should=true): + ProjectSettings.set(str(GDSCRIPT_WARNING, 'exclude_addons'), should) + + +## Resets warning settings to what they are set to in Project Settings +static func reset_warnings(): + apply_warnings_dictionary(_project_warnings) + + + +static func set_project_setting_warning(warning_name : String, value : Variant): + var property_name = str(GDSCRIPT_WARNING, warning_name) + # This check will generate a warning if the setting does not exist + if(property_name in ProjectSettings): + ProjectSettings.set(property_name, value) + + +static func apply_warnings_dictionary(warning_values : Dictionary): + for key in warning_values: + set_project_setting_warning(key, warning_values[key]) + +# --------------------------------------- +# Class +# --------------------------------------- +static func create_ignore_all_dictionary(): + return replace_warnings_values(project_warnings, -1, IGNORE) + + +static func create_warn_all_warnings_dictionary(): + return replace_warnings_values(project_warnings, -1, WARN) + + +static func replace_warnings_with_ignore(dict): + return replace_warnings_values(dict, WARN, IGNORE) + + +static func replace_errors_with_warnings(dict): + return replace_warnings_values(dict, ERROR, WARN) + + +static func replace_warnings_values(dict, replace_this, with_this): + var to_return = dict.duplicate() + for key in to_return: + if(typeof(to_return[key]) == TYPE_INT and (replace_this == -1 or to_return[key] == replace_this)): + to_return[key] = with_this + return to_return + + +static func create_warnings_dictionary_from_project_settings() -> Dictionary : + var props = ProjectSettings.get_property_list() + var to_return = {} + for i in props.size(): + if(props[i].name.begins_with(GDSCRIPT_WARNING)): + var prop_name = props[i].name.replace(GDSCRIPT_WARNING, '') + to_return[prop_name] = ProjectSettings.get(props[i].name) + return to_return + + +static func print_warnings_dictionary(which : Dictionary): + var is_valid = true + for key in which: + var value_str = str(which[key]) + if(_project_warnings.has(key)): + if(typeof(which[key]) == TYPE_INT): + if(WARNING_LOOKUP.has(which[key])): + value_str = WARNING_LOOKUP[which[key]] + else: + push_warning(str(which[key], ' is not a valid value for ', key)) + is_valid = false + else: + push_warning(str(key, ' is not a valid warning setting')) + is_valid = false + var s = str(key, ' = ', value_str) + print(s) + return is_valid + + +static func load_script_ignoring_all_warnings(path : String) -> Variant: + return load_script_using_custom_warnings(path, create_ignore_all_dictionary()) + + +static func load_script_using_custom_warnings(path : String, warnings_dictionary : Dictionary) -> Variant: + var current_warns = create_warnings_dictionary_from_project_settings() + apply_warnings_dictionary(warnings_dictionary) + var s = load(path) + apply_warnings_dictionary(current_warns) + + return s From 9da4dc3c6fd51eefd62cd9d4fb37e48cf8719a9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Qui=C3=B1ones?= Date: Wed, 6 Nov 2024 15:56:08 -0300 Subject: [PATCH 68/98] Pull Spanish translation from Transifex Run `tx pull --use-git-timestamps`. This brings a Spanish translation made by myself, and a partial German translation that's being contributed. I only added the Spanish one for now. --- addons/block_code/locale/es.po | 278 ++++++++++++++++++--------------- 1 file changed, 153 insertions(+), 125 deletions(-) diff --git a/addons/block_code/locale/es.po b/addons/block_code/locale/es.po index 84224305..820b86d2 100644 --- a/addons/block_code/locale/es.po +++ b/addons/block_code/locale/es.po @@ -175,11 +175,11 @@ msgstr "" #: addons/block_code/block_code_plugin.gd msgid "Regenerate %s POT file" -msgstr "" +msgstr "Regenera %s archivo POT" #: addons/block_code/block_code_plugin.gd msgid "Update %s translated files" -msgstr "" +msgstr "Actualiza %s archivos traducidos" #: addons/block_code/blocks/communication/add_node_to_group.tres #: addons/block_code/blocks/communication/add_to_group.tres @@ -192,7 +192,7 @@ msgstr "Comunicación | Grupos" #: addons/block_code/blocks/communication/add_node_to_group.tres msgid "Add the node into the group" -msgstr "Agrega el nodo al grupo" +msgstr "Agrega el nodo al grupo." #: addons/block_code/blocks/communication/add_node_to_group.tres msgid "add {node: OBJECT} to group {group: STRING}" @@ -200,7 +200,7 @@ msgstr "agregar {node: OBJECT} al grupo {group: STRING}" #: addons/block_code/blocks/communication/add_to_group.tres msgid "Add this node into the group" -msgstr "Agrega este nodo al grupo" +msgstr "Agrega este nodo al grupo." #: addons/block_code/blocks/communication/add_to_group.tres msgid "add to group {group: STRING}" @@ -228,7 +228,7 @@ msgstr "cuando este nodo deja de colisionar con [something: OBJECT]" #: addons/block_code/blocks/communication/call_method_group.tres msgid "Calls the method/function on each member of the given group" -msgstr "Llama al método/función en cada miembro del grupo dado" +msgstr "Llama al método/función en cada miembro del grupo proporcionado." #: addons/block_code/blocks/communication/call_method_group.tres msgid "call method {method_name: STRING} in group {group: STRING}" @@ -236,7 +236,7 @@ msgstr "llamar al método {method_name: STRING} en el grupo {group: STRING}" #: addons/block_code/blocks/communication/call_method_node.tres msgid "Calls the method/function of the given node" -msgstr "Llama al método/función en el nodo dado" +msgstr "Llama al método/función en el nodo proporcionado." #: addons/block_code/blocks/communication/call_method_node.tres msgid "call method {method_name: STRING} on node {node: OBJECT}" @@ -244,11 +244,11 @@ msgstr "llamar al método {method_name: STRING} en el nodo {node: OBJECT}" #: addons/block_code/blocks/communication/define_method.tres msgid "Define a method/function with following statements" -msgstr "Define un método/función con las declaraciones siguientes" +msgstr "Define un método/función con las declaraciones siguientes." #: addons/block_code/blocks/communication/define_method.tres msgid "define method {method_name: STRING_NAME}" -msgstr "definir al método {method_name: STRING_NAME}" +msgstr "definir método {method_name: STRING_NAME}" #: addons/block_code/blocks/communication/get_node.tres msgid "Communication | Nodes" @@ -256,131 +256,132 @@ msgstr "Comunicación | Nodos" #: addons/block_code/blocks/communication/get_node.tres msgid "Get the node at the given path" -msgstr "" +msgstr "Obtiene el nodo en la ruta proporcionada." #: addons/block_code/blocks/communication/get_node.tres msgid "{path: NIL}" -msgstr "" +msgstr "{path: NIL}" #: addons/block_code/blocks/communication/is_in_group.tres msgid "Is this node in the group" -msgstr "" +msgstr "Verdadero si este nodo pertenece al grupo proporcionado." #: addons/block_code/blocks/communication/is_in_group.tres msgid "is in group {group: STRING}" -msgstr "" +msgstr "está en el grupo {group: STRING}" #: addons/block_code/blocks/communication/is_node_in_group.tres msgid "Is the node in the group" -msgstr "" +msgstr "Verdadero si el nodo pertenece al grupo proporcionado." #: addons/block_code/blocks/communication/is_node_in_group.tres msgid "{node: OBJECT} is in group {group: STRING}" -msgstr "" +msgstr "{node: OBJECT} está en el grupo {group: STRING}" #: addons/block_code/blocks/communication/remove_from_group.tres msgid "Remove this node from the group" -msgstr "" +msgstr "Quita a este nodo del grupo." #: addons/block_code/blocks/communication/remove_from_group.tres msgid "remove from group {group: STRING}" -msgstr "" +msgstr "quitar del grupo {group: STRING}" #: addons/block_code/blocks/communication/remove_node_from_group.tres msgid "Remove the node from the group" -msgstr "" +msgstr "Quita el nodo del grupo." #: addons/block_code/blocks/communication/remove_node_from_group.tres msgid "remove {node: OBJECT} from group {group: NIL}" -msgstr "" +msgstr "quitar {node: OBJECT} del grupo {group: NIL}" #: addons/block_code/blocks/graphics/animationplayer_is_playing.tres #: addons/block_code/blocks/graphics/animationplayer_pause.tres #: addons/block_code/blocks/graphics/animationplayer_play.tres #: addons/block_code/blocks/graphics/animationplayer_stop.tres msgid "Graphics | Animation" -msgstr "" +msgstr "Gráficos | Animación" #: addons/block_code/blocks/graphics/animationplayer_is_playing.tres msgid "Check if an animation is currently playing." -msgstr "" +msgstr "Chequea si la animación se está reproduciendo." #: addons/block_code/blocks/graphics/animationplayer_is_playing.tres msgid "is playing" -msgstr "" +msgstr "se está reproduciendo" #: addons/block_code/blocks/graphics/animationplayer_pause.tres msgid "Pause the currently playing animation." -msgstr "" +msgstr "Pausa la animación que se está reproduciendo." #: addons/block_code/blocks/graphics/animationplayer_pause.tres msgid "pause" -msgstr "" +msgstr "pausar" #: addons/block_code/blocks/graphics/animationplayer_play.tres msgid "Play the animation." -msgstr "" +msgstr "Reproduce la animación." #: addons/block_code/blocks/graphics/animationplayer_play.tres msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" -msgstr "" +msgstr "reproducir {animation: STRING} {direction: NIL} {wait_mode: NIL}" #: addons/block_code/blocks/graphics/animationplayer_stop.tres msgid "Stop the currently playing animation." -msgstr "" +msgstr "Detiene la animación que se está reproduciendo." #: addons/block_code/blocks/graphics/animationplayer_stop.tres #: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres msgid "stop" -msgstr "" +msgstr "detener" #: addons/block_code/blocks/graphics/viewport_center.tres #: addons/block_code/blocks/graphics/viewport_height.tres #: addons/block_code/blocks/graphics/viewport_width.tres msgid "Graphics | Viewport" -msgstr "" +msgstr "Gráficos | Vista" #: addons/block_code/blocks/graphics/viewport_center.tres msgid "Coordinates of the middle of the viewable screen when playing." msgstr "" +"Las coordenadas al centro de la vista del juego cuando este está corriendo." #: addons/block_code/blocks/graphics/viewport_center.tres msgid "viewport center" -msgstr "" +msgstr "centro de la vista" #: addons/block_code/blocks/graphics/viewport_height.tres msgid "How tall the viewable screen is when playing." -msgstr "" +msgstr "La altura de la vista del juego cuando este está corriendo." #: addons/block_code/blocks/graphics/viewport_height.tres msgid "viewport height" -msgstr "" +msgstr "altura de la vista" #: addons/block_code/blocks/graphics/viewport_width.tres msgid "How wide the viewable screen is when playing." -msgstr "" +msgstr "El ancho de la vista del juego cuando este está corriendo." #: addons/block_code/blocks/graphics/viewport_width.tres msgid "viewport width" -msgstr "" +msgstr "ancho de la vista" #: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres #: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres msgid "Physics | Velocity" -msgstr "" +msgstr "Física | Velocidad" #: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres msgid "True if the character is on the floor." -msgstr "" +msgstr "Verdadero si el personaje está en el suelo." #: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres msgid "is on floor" -msgstr "" +msgstr "está en el suelo" #: addons/block_code/blocks/input/characterbody2d_move.tres #: addons/block_code/blocks/input/is_input_actioned.tres msgid "Input" -msgstr "" +msgstr "Entrada" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" @@ -388,130 +389,142 @@ msgid "" "given keys. The speed of movement can be adjusted separately for x (left and" " right) and y (up and down)." msgstr "" +"Mueve al personaje hacia arriba, abajo, izquierda y derecha con el teclado " +"usando las teclas proporcionadas. La velocidad del movimiento puede ser " +"ajustado por separado para X (izquierda y derecha) como para Y (arriba y " +"abajo)." #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" " speed {speed: VECTOR2}" msgstr "" +"mover con teclas {up: STRING} {down: STRING} {left: STRING} {right: STRING} " +"a velocidad {speed: VECTOR2}" #: addons/block_code/blocks/input/is_input_actioned.tres msgid "True if the specified input action has been pressed or released." msgstr "" +"Verdadero si la acción de entrada especificada ha sido apretada o soltada." #: addons/block_code/blocks/input/is_input_actioned.tres msgid "action {action_name: STRING_NAME} is {action: NIL}" -msgstr "" +msgstr "acción {action_name: STRING_NAME} está {action: NIL}" #: addons/block_code/blocks/lifecycle/process.tres #: addons/block_code/blocks/lifecycle/queue_free.tres #: addons/block_code/blocks/lifecycle/queue_free_node.tres #: addons/block_code/blocks/lifecycle/ready.tres msgid "Lifecycle" -msgstr "" +msgstr "Ciclo de vida" #: addons/block_code/blocks/lifecycle/process.tres msgid "" "Attached blocks will be executed during the processing step of the main loop" msgstr "" +"Los bloques conectados serán ejecutados durante el paso de procesamiento del" +" bucle principal." #: addons/block_code/blocks/lifecycle/process.tres msgid "every frame" -msgstr "" +msgstr "en cada fotograma" #: addons/block_code/blocks/lifecycle/queue_free.tres msgid "Queues this node to be deleted at the end of the current frame" -msgstr "" +msgstr "Hace que este nodo sea borrado al final del fotograma actual." #: addons/block_code/blocks/lifecycle/queue_free.tres msgid "remove" -msgstr "" +msgstr "quitar" #: addons/block_code/blocks/lifecycle/queue_free_node.tres msgid "Queues the given node to be deleted at the end of the current frame" msgstr "" +"Hace que el nodo proporcionado sea borrado al final del fotograma actual." #: addons/block_code/blocks/lifecycle/queue_free_node.tres msgid "remove {node: OBJECT}" -msgstr "" +msgstr "quitar {node: OBJECT}" #: addons/block_code/blocks/lifecycle/ready.tres msgid "Attached blocks will be executed once when the node is \"ready\"" msgstr "" +"Los bloques conectados serán ejecutados una vez que el nodo esté \"listo\"." #: addons/block_code/blocks/lifecycle/ready.tres msgid "when starting" -msgstr "" +msgstr "al empezar" #: addons/block_code/blocks/log/breakpoint.tres #: addons/block_code/blocks/log/concat.tres #: addons/block_code/blocks/log/print.tres msgid "Log" -msgstr "" +msgstr "Registro" #: addons/block_code/blocks/log/breakpoint.tres msgid "Pause execution and show the current line of code in the debugger." msgstr "" +"Pausa la ejecución y muestra la línea de código actual en el depurador." #: addons/block_code/blocks/log/breakpoint.tres msgid "breakpoint" -msgstr "" +msgstr "punto de interrupción" #: addons/block_code/blocks/log/concat.tres msgid "{string1: STRING} + {string2: STRING}" -msgstr "" +msgstr "{string1: STRING} + {string2: STRING}" #: addons/block_code/blocks/log/print.tres msgid "Print the text to output" -msgstr "" +msgstr "Imprime el texto a la salida." #: addons/block_code/blocks/log/print.tres msgid "log text {text: STRING}" -msgstr "" +msgstr "registrar texto {text: STRING}" #: addons/block_code/blocks/logic/and.tres #: addons/block_code/blocks/logic/not.tres #: addons/block_code/blocks/logic/or.tres msgid "Logic | Boolean" -msgstr "" +msgstr "Lógica | Booleanos" #: addons/block_code/blocks/logic/and.tres msgid "{bool1: BOOL} and {bool2: BOOL}" -msgstr "" +msgstr "{bool1: BOOL} y {bool2: BOOL}" #: addons/block_code/blocks/logic/compare.tres msgid "Logic | Comparison" -msgstr "" +msgstr "Lógica | Comparación" #: addons/block_code/blocks/logic/compare.tres msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" -msgstr "" +msgstr "{float1: FLOAT} {op: NIL} {float2: FLOAT}" #: addons/block_code/blocks/logic/else.tres #: addons/block_code/blocks/logic/else_if.tres #: addons/block_code/blocks/logic/if.tres msgid "Logic | Conditionals" -msgstr "" +msgstr "Lógica | Condicionales" #: addons/block_code/blocks/logic/else.tres msgid "else" -msgstr "" +msgstr "si no" #: addons/block_code/blocks/logic/else_if.tres msgid "else if {condition: BOOL}" -msgstr "" +msgstr "si no, si {condition: BOOL}" #: addons/block_code/blocks/logic/if.tres msgid "if {condition: BOOL}" -msgstr "" +msgstr "si {condition: BOOL}" #: addons/block_code/blocks/logic/not.tres msgid "not {bool: BOOL}" -msgstr "" +msgstr "no {bool: BOOL}" #: addons/block_code/blocks/logic/or.tres msgid "{bool1: BOOL} or {bool2: BOOL}" -msgstr "" +msgstr "{bool1: BOOL} o {bool2: BOOL}" #: addons/block_code/blocks/loops/await_scene_ready.tres #: addons/block_code/blocks/loops/break.tres @@ -519,27 +532,27 @@ msgstr "" #: addons/block_code/blocks/loops/for.tres #: addons/block_code/blocks/loops/while.tres msgid "Loops" -msgstr "" +msgstr "Bucles" #: addons/block_code/blocks/loops/await_scene_ready.tres msgid "wait for the scene to be ready" -msgstr "" +msgstr "esperar a que la escena esté lista" #: addons/block_code/blocks/loops/break.tres msgid "break" -msgstr "" +msgstr "interrumpir" #: addons/block_code/blocks/loops/continue.tres msgid "continue" -msgstr "" +msgstr "continuar" #: addons/block_code/blocks/loops/for.tres msgid "Run the connected blocks [i]number[/i] times" -msgstr "" +msgstr "Corre los bloques conectados un número [i]number[/i] de veces." #: addons/block_code/blocks/loops/for.tres msgid "repeat {number: INT}" -msgstr "" +msgstr "repetir {number: INT}" #: addons/block_code/blocks/loops/while.tres msgid "" @@ -547,10 +560,13 @@ msgid "" "\n" "Hint: snap a [b]Comparison[/b] block into the condition." msgstr "" +"Corre los bloques conectados mientras la condición [i]condition[/i] sea cierta.\n" +"\n" +"Hint: encaja un bloque de [b]Comparación[/b] dentro de la condición." #: addons/block_code/blocks/loops/while.tres msgid "while {condition: BOOL}" -msgstr "" +msgstr "mientras {condition: BOOL}" #: addons/block_code/blocks/math/add.tres #: addons/block_code/blocks/math/cos.tres @@ -568,41 +584,43 @@ msgstr "" #: addons/block_code/blocks/math/vector_multiply.tres #: addons/block_code/blocks/variables/vector2.tres msgid "Math" -msgstr "" +msgstr "Matemáticas" #: addons/block_code/blocks/math/add.tres msgid "{a: FLOAT} + {b: FLOAT}" -msgstr "" +msgstr "{a: FLOAT} + {b: FLOAT}" #: addons/block_code/blocks/math/cos.tres msgid "Calculate the cosine of [i]angle[/i]" -msgstr "" +msgstr "Calcula el coseno del [i]angle[/i]" #: addons/block_code/blocks/math/cos.tres msgid "cos {angle: FLOAT}" -msgstr "" +msgstr "coseno {angle: FLOAT}" #: addons/block_code/blocks/math/divide.tres msgid "{a: FLOAT} / {b: FLOAT}" -msgstr "" +msgstr "{a: FLOAT} / {b: FLOAT}" #: addons/block_code/blocks/math/multiply.tres msgid "{a: FLOAT} * {b: FLOAT}" -msgstr "" +msgstr "{a: FLOAT} * {b: FLOAT}" #: addons/block_code/blocks/math/pow.tres msgid "{base: FLOAT} ^ {exp: FLOAT}" -msgstr "" +msgstr "{base: FLOAT} ^ {exp: FLOAT}" #: addons/block_code/blocks/math/randf_range.tres msgid "" "Generate a random floating point number between [i]from[/i] and [i]to[/i] " "inclusively" msgstr "" +"Genera un número aleatorio de punto flotante entre [i]from[/i] y [i]to[/i], " +"inclusive." #: addons/block_code/blocks/math/randf_range.tres msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" -msgstr "" +msgstr "número de punto flotante aleatorio entre {from: FLOAT} y {to: FLOAT}" #: addons/block_code/blocks/math/randi_range.tres msgid "" @@ -610,68 +628,72 @@ msgid "" "[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " "positive number" msgstr "" +"Genera un número entero de 32-bits entre [i]from[/i] y [i]to[/i] inclusive. " +"[i]from[/i] y [i]to[/i] pueden ser números negativos." #: addons/block_code/blocks/math/randi_range.tres msgid "random integer number between {from: INT} and {to: INT}" -msgstr "" +msgstr "número entero aleatorio entre {from: INT} y {to: INT}" #: addons/block_code/blocks/math/sin.tres msgid "Calculate the sine of [i]angle[/i]" -msgstr "" +msgstr "Calcula el seno del ángulo [i]angle[/i]." #: addons/block_code/blocks/math/sin.tres msgid "sin {angle: FLOAT}" -msgstr "" +msgstr "seno {angle: FLOAT}" #: addons/block_code/blocks/math/subtract.tres msgid "{a: FLOAT} - {b: FLOAT}" -msgstr "" +msgstr "{a: FLOAT} - {b: FLOAT}" #: addons/block_code/blocks/math/tan.tres msgid "Calculate the tangent of [i]angle[/i]" -msgstr "" +msgstr "Calcula la tangente del ángulo [i]angle[/i]." #: addons/block_code/blocks/math/tan.tres msgid "tan {angle: FLOAT}" -msgstr "" +msgstr "tangente {angle: FLOAT}" #: addons/block_code/blocks/math/vector2_x.tres msgid "Gives the x of a [i]Vector2[/i]" -msgstr "" +msgstr "Obtiene la componente X de un [i]Vector2[/i]." #: addons/block_code/blocks/math/vector2_x.tres msgid "x of {vector2: VECTOR2}" -msgstr "" +msgstr "x de {vector2: VECTOR2}" #: addons/block_code/blocks/math/vector2_y.tres msgid "Gives the y of a [i]Vector2[/i]" -msgstr "" +msgstr "Obtiene la componente Y de un [i]Vector2[/i]." #: addons/block_code/blocks/math/vector2_y.tres msgid "y of {vector2: VECTOR2}" -msgstr "" +msgstr "y del {vector2: VECTOR2}" #: addons/block_code/blocks/math/vector_from_angle.tres msgid "Creates a unit Vector2 rotated to the given angle in radians." -msgstr "" +msgstr "Crea un Vector2 unitario rotado al ángulo proporcionado en radianes." #: addons/block_code/blocks/math/vector_from_angle.tres msgid "vector from {angle: FLOAT}" -msgstr "" +msgstr "vector desde {angle: FLOAT}" #: addons/block_code/blocks/math/vector_multiply.tres msgid "" "Multiplies a vector with a number. Use this, for example, to get a point " "some distance away along an angle." msgstr "" +"Multiplica un vector por un número. Usa esto, por ejemplo, para obtener un " +"punto a cierta distancia a lo largo de un ángulo." #: addons/block_code/blocks/math/vector_multiply.tres msgid "multiply {vector: VECTOR2} by {number: FLOAT}" -msgstr "" +msgstr "multiplicar {vector: VECTOR2} por {number: FLOAT}" #: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres msgid "move and slide" -msgstr "" +msgstr "mover y desplazar" #: addons/block_code/blocks/sounds/audiostreamplayer_play.tres #: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres @@ -680,86 +702,90 @@ msgstr "" #: addons/block_code/blocks/sounds/play_sound.tres #: addons/block_code/blocks/sounds/stop_sound.tres msgid "Sounds" -msgstr "" +msgstr "Sonidos" #: addons/block_code/blocks/sounds/audiostreamplayer_play.tres msgid "Play the audio stream" -msgstr "" +msgstr "Reproduce la transmisión de audio." #: addons/block_code/blocks/sounds/audiostreamplayer_play.tres msgid "play" -msgstr "" +msgstr "reproducir" #: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres #: addons/block_code/blocks/sounds/stop_sound.tres msgid "Stop the audio stream" -msgstr "" +msgstr "Detiene la transmisión de audio." #: addons/block_code/blocks/sounds/load_sound.tres msgid "Load a resource file as the audio stream" -msgstr "" +msgstr "Carga un archivo de recursos como una transmisión de audio." #: addons/block_code/blocks/sounds/load_sound.tres msgid "load file {file_path: STRING} as sound {name: STRING}" -msgstr "" +msgstr "cargar archivo {file_path: STRING} como sonido {name: STRING}" #: addons/block_code/blocks/sounds/pause_continue_sound.tres msgid "Pause/Continue the audio stream" -msgstr "" +msgstr "Pausa/continúa la transmisión de audio." #: addons/block_code/blocks/sounds/pause_continue_sound.tres msgid "{pause: NIL} the sound {name: STRING}" -msgstr "" +msgstr "{pause: NIL} el sonido {name: STRING}" #: addons/block_code/blocks/sounds/play_sound.tres msgid "Play the audio stream with volume and pitch" msgstr "" +"Reproduce la transmisión de audio con el volumen y tono proporcionados." #: addons/block_code/blocks/sounds/play_sound.tres msgid "" "play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " "{pitch: FLOAT}" msgstr "" +"reproducir el sonido {name: STRING} con volumen {db: FLOAT} dB y escala de " +"tono {pitch: FLOAT}" #: addons/block_code/blocks/sounds/stop_sound.tres msgid "stop the sound {name: STRING}" -msgstr "" +msgstr "detener el sonido {name: STRING}" #: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres msgid "Lifecycle | Spawn" -msgstr "" +msgstr "Ciclo de vida | Aparecer" #: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres msgid "Emitted when all active particles have finished processing." msgstr "" +"Emitido cuando todas las partículas activas han terminado de procesar." #: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres msgid "when particles are finished" -msgstr "" +msgstr "cuando las partículas terminan" #: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres msgid "Transform | Position" -msgstr "" +msgstr "Transformación | Posición" #: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres msgid "set physics position {position: VECTOR2}" -msgstr "" +msgstr "establecer posición física a {position: VECTOR2}" #: addons/block_code/blocks/ui/label_set_text.tres msgid "UI" -msgstr "" +msgstr "Interfaz de usuario" #: addons/block_code/blocks/ui/label_set_text.tres msgid "Set the text for the label." -msgstr "" +msgstr "Establece el texto de la etiqueta." #: addons/block_code/blocks/ui/label_set_text.tres msgid "set text to {text: STRING}" -msgstr "" +msgstr "establecer texto a {text: STRING}" #: addons/block_code/blocks/variables/vector2.tres msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" -msgstr "" +msgstr "vector2 x: {x: FLOAT} y: {y: FLOAT}" #: addons/block_code/examples/spawner/spawner.tscn msgid "" @@ -775,87 +801,89 @@ msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd msgid "Open Block Script" -msgstr "" +msgstr "Abrir script de bloques" #: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd msgid "0" -msgstr "" +msgstr "0" #: addons/block_code/ui/main_panel.tscn msgid "Show Generated Script" -msgstr "" +msgstr "Mostrar el script generado" #: addons/block_code/ui/main_panel.tscn msgid "Delete Block Code" -msgstr "" +msgstr "Borrar código de bloques" #: addons/block_code/ui/main_panel.tscn msgid "Toggle Block Picker (Ctrl+BackSlash)" -msgstr "" +msgstr "Alternar paleta de bloques (Ctrl + barra invertida)" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "1.0x" -msgstr "" +msgstr "1.0x" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "Select a node to create and edit block code." -msgstr "" +msgstr "Selecciona un nodo para crear y editar un código de bloques." #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" "Use block coding to create custom behavior and game mechanics for " "\"{node}\"." msgstr "" +"Utiliza el código de bloques para crear un comporamiento particular y " +"mecánicas de juego para \"{node}\"." #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "Add Block Code" -msgstr "" +msgstr "Agregar código de bloques" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "\"{node}\" uses block coding." -msgstr "" +msgstr "\"{node}\" usa código de bloques." #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "Open in Editor" -msgstr "" +msgstr "Abrir en editor" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "Override Block Code" -msgstr "" +msgstr "Sobreescribir código de bloques" #: addons/block_code/ui/blocks/block/block.gd msgid "Type:" -msgstr "" +msgstr "Tipo:" #: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn msgid "Parameter" -msgstr "" +msgstr "Parámetro" #: addons/block_code/ui/picker/categories/block_category_button.tscn msgid "Example" -msgstr "" +msgstr "Ejemplo" #: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn #: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn msgid "Create New Variable" -msgstr "" +msgstr "Crear variable nueva" #: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn msgid "Create" -msgstr "" +msgstr "Crear" #: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn msgid "Name " -msgstr "" +msgstr "Nombre" #: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn msgid "Type " -msgstr "" +msgstr "Tipo" #: addons/block_code/ui/script_window/script_window.tscn msgid "Block Code Generated GDScript" -msgstr "" +msgstr "GDScript generado desde el código de bloques" #: addons/block_code/ui/script_window/script_window.tscn msgid "Copy" -msgstr "" +msgstr "Copiar" From 7f30d9d63e0367999db1f50fdf903e4d8f3d4f0f Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Wed, 6 Nov 2024 13:17:43 -0700 Subject: [PATCH 69/98] Sync Transifex translations --- addons/block_code/locale/de.po | 107 +++++++++++++++++---------------- 1 file changed, 56 insertions(+), 51 deletions(-) diff --git a/addons/block_code/locale/de.po b/addons/block_code/locale/de.po index d38a8c3d..52c41845 100644 --- a/addons/block_code/locale/de.po +++ b/addons/block_code/locale/de.po @@ -158,10 +158,15 @@ # # FIRST AUTHOR , YEAR. # +# Translators: +# Ettore Atalan , 2024 +# Dan Nicholson , 2024 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Dan Nicholson , 2024\n" "Language-Team: German (https://app.transifex.com/endless-os/teams/9016/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -171,11 +176,11 @@ msgstr "" #: addons/block_code/block_code_plugin.gd msgid "Regenerate %s POT file" -msgstr "" +msgstr "%s POT-Datei regenerieren" #: addons/block_code/block_code_plugin.gd msgid "Update %s translated files" -msgstr "" +msgstr "%s übersetzte Dateien aktualisieren" #: addons/block_code/blocks/communication/add_node_to_group.tres #: addons/block_code/blocks/communication/add_to_group.tres @@ -184,11 +189,11 @@ msgstr "" #: addons/block_code/blocks/communication/remove_from_group.tres #: addons/block_code/blocks/communication/remove_node_from_group.tres msgid "Communication | Groups" -msgstr "" +msgstr "Kommunikation | Gruppen" #: addons/block_code/blocks/communication/add_node_to_group.tres msgid "Add the node into the group" -msgstr "" +msgstr "Knoten zur Gruppe hinzufügen" #: addons/block_code/blocks/communication/add_node_to_group.tres msgid "add {node: OBJECT} to group {group: STRING}" @@ -196,7 +201,7 @@ msgstr "" #: addons/block_code/blocks/communication/add_to_group.tres msgid "Add this node into the group" -msgstr "" +msgstr "Diesen Knoten zur Gruppe hinzufügen" #: addons/block_code/blocks/communication/add_to_group.tres msgid "add to group {group: STRING}" @@ -210,7 +215,7 @@ msgstr "" #: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres #: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres msgid "Communication | Methods" -msgstr "" +msgstr "Kommunikation | Methoden" #: addons/block_code/blocks/communication/area2d_on_entered.tres #: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres @@ -248,7 +253,7 @@ msgstr "" #: addons/block_code/blocks/communication/get_node.tres msgid "Communication | Nodes" -msgstr "" +msgstr "Kommunikation | Knoten" #: addons/block_code/blocks/communication/get_node.tres msgid "Get the node at the given path" @@ -260,31 +265,31 @@ msgstr "" #: addons/block_code/blocks/communication/is_in_group.tres msgid "Is this node in the group" -msgstr "" +msgstr "Ist dieser Knoten in der Gruppe" #: addons/block_code/blocks/communication/is_in_group.tres msgid "is in group {group: STRING}" -msgstr "" +msgstr "ist in Gruppe {group: STRING}" #: addons/block_code/blocks/communication/is_node_in_group.tres msgid "Is the node in the group" -msgstr "" +msgstr "Ist der Knoten in der Gruppe" #: addons/block_code/blocks/communication/is_node_in_group.tres msgid "{node: OBJECT} is in group {group: STRING}" -msgstr "" +msgstr "{node: OBJECT} ist in Gruppe {group: STRING}" #: addons/block_code/blocks/communication/remove_from_group.tres msgid "Remove this node from the group" -msgstr "" +msgstr "Diesen Knoten aus der Gruppe entfernen" #: addons/block_code/blocks/communication/remove_from_group.tres msgid "remove from group {group: STRING}" -msgstr "" +msgstr "aus Gruppe entfernen {group: STRING}" #: addons/block_code/blocks/communication/remove_node_from_group.tres msgid "Remove the node from the group" -msgstr "" +msgstr "Knoten aus der Gruppe entfernen" #: addons/block_code/blocks/communication/remove_node_from_group.tres msgid "remove {node: OBJECT} from group {group: NIL}" @@ -295,7 +300,7 @@ msgstr "" #: addons/block_code/blocks/graphics/animationplayer_play.tres #: addons/block_code/blocks/graphics/animationplayer_stop.tres msgid "Graphics | Animation" -msgstr "" +msgstr "Grafik | Animation" #: addons/block_code/blocks/graphics/animationplayer_is_playing.tres msgid "Check if an animation is currently playing." @@ -334,7 +339,7 @@ msgstr "" #: addons/block_code/blocks/graphics/viewport_height.tres #: addons/block_code/blocks/graphics/viewport_width.tres msgid "Graphics | Viewport" -msgstr "" +msgstr "Grafik | Ansichtsfenster" #: addons/block_code/blocks/graphics/viewport_center.tres msgid "Coordinates of the middle of the viewable screen when playing." @@ -342,7 +347,7 @@ msgstr "" #: addons/block_code/blocks/graphics/viewport_center.tres msgid "viewport center" -msgstr "" +msgstr "Ansichtsfenstermitte" #: addons/block_code/blocks/graphics/viewport_height.tres msgid "How tall the viewable screen is when playing." @@ -350,7 +355,7 @@ msgstr "" #: addons/block_code/blocks/graphics/viewport_height.tres msgid "viewport height" -msgstr "" +msgstr "Ansichtsfensterhöhe" #: addons/block_code/blocks/graphics/viewport_width.tres msgid "How wide the viewable screen is when playing." @@ -358,25 +363,25 @@ msgstr "" #: addons/block_code/blocks/graphics/viewport_width.tres msgid "viewport width" -msgstr "" +msgstr "Ansichtsfensterbreite" #: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres #: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres msgid "Physics | Velocity" -msgstr "" +msgstr "Physik | Geschwindigkeit" #: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres msgid "True if the character is on the floor." -msgstr "" +msgstr "Wahr, wenn die Figur auf dem Boden ist." #: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres msgid "is on floor" -msgstr "" +msgstr "ist auf dem Boden" #: addons/block_code/blocks/input/characterbody2d_move.tres #: addons/block_code/blocks/input/is_input_actioned.tres msgid "Input" -msgstr "" +msgstr "Eingabe" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" @@ -404,7 +409,7 @@ msgstr "" #: addons/block_code/blocks/lifecycle/queue_free_node.tres #: addons/block_code/blocks/lifecycle/ready.tres msgid "Lifecycle" -msgstr "" +msgstr "Lebenszyklus" #: addons/block_code/blocks/lifecycle/process.tres msgid "" @@ -421,7 +426,7 @@ msgstr "" #: addons/block_code/blocks/lifecycle/queue_free.tres msgid "remove" -msgstr "" +msgstr "entfernen" #: addons/block_code/blocks/lifecycle/queue_free_node.tres msgid "Queues the given node to be deleted at the end of the current frame" @@ -429,7 +434,7 @@ msgstr "" #: addons/block_code/blocks/lifecycle/queue_free_node.tres msgid "remove {node: OBJECT}" -msgstr "" +msgstr "entfernen {node: OBJECT}" #: addons/block_code/blocks/lifecycle/ready.tres msgid "Attached blocks will be executed once when the node is \"ready\"" @@ -443,7 +448,7 @@ msgstr "" #: addons/block_code/blocks/log/concat.tres #: addons/block_code/blocks/log/print.tres msgid "Log" -msgstr "" +msgstr "Protokoll" #: addons/block_code/blocks/log/breakpoint.tres msgid "Pause execution and show the current line of code in the debugger." @@ -451,7 +456,7 @@ msgstr "" #: addons/block_code/blocks/log/breakpoint.tres msgid "breakpoint" -msgstr "" +msgstr "Haltepunkt" #: addons/block_code/blocks/log/concat.tres msgid "{string1: STRING} + {string2: STRING}" @@ -477,7 +482,7 @@ msgstr "" #: addons/block_code/blocks/logic/compare.tres msgid "Logic | Comparison" -msgstr "" +msgstr "Logik | Vergleich" #: addons/block_code/blocks/logic/compare.tres msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" @@ -487,7 +492,7 @@ msgstr "" #: addons/block_code/blocks/logic/else_if.tres #: addons/block_code/blocks/logic/if.tres msgid "Logic | Conditionals" -msgstr "" +msgstr "Logik | Konditionale" #: addons/block_code/blocks/logic/else.tres msgid "else" @@ -515,7 +520,7 @@ msgstr "" #: addons/block_code/blocks/loops/for.tres #: addons/block_code/blocks/loops/while.tres msgid "Loops" -msgstr "" +msgstr "Schleifen" #: addons/block_code/blocks/loops/await_scene_ready.tres msgid "wait for the scene to be ready" @@ -564,7 +569,7 @@ msgstr "" #: addons/block_code/blocks/math/vector_multiply.tres #: addons/block_code/blocks/variables/vector2.tres msgid "Math" -msgstr "" +msgstr "Mathe" #: addons/block_code/blocks/math/add.tres msgid "{a: FLOAT} + {b: FLOAT}" @@ -637,7 +642,7 @@ msgstr "" #: addons/block_code/blocks/math/vector2_x.tres msgid "x of {vector2: VECTOR2}" -msgstr "" +msgstr "x von {vector2: VECTOR2}" #: addons/block_code/blocks/math/vector2_y.tres msgid "Gives the y of a [i]Vector2[/i]" @@ -645,7 +650,7 @@ msgstr "" #: addons/block_code/blocks/math/vector2_y.tres msgid "y of {vector2: VECTOR2}" -msgstr "" +msgstr "y von {vector2: VECTOR2}" #: addons/block_code/blocks/math/vector_from_angle.tres msgid "Creates a unit Vector2 rotated to the given angle in radians." @@ -676,7 +681,7 @@ msgstr "" #: addons/block_code/blocks/sounds/play_sound.tres #: addons/block_code/blocks/sounds/stop_sound.tres msgid "Sounds" -msgstr "" +msgstr "Klänge" #: addons/block_code/blocks/sounds/audiostreamplayer_play.tres msgid "Play the audio stream" @@ -735,7 +740,7 @@ msgstr "" #: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres msgid "Transform | Position" -msgstr "" +msgstr "Umwandeln | Position" #: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres msgid "set physics position {position: VECTOR2}" @@ -771,7 +776,7 @@ msgstr "" #: addons/block_code/inspector_plugin/block_script_inspector.gd msgid "Open Block Script" -msgstr "" +msgstr "Blockskript öffnen" #: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd msgid "0" @@ -779,11 +784,11 @@ msgstr "" #: addons/block_code/ui/main_panel.tscn msgid "Show Generated Script" -msgstr "" +msgstr "Generiertes Skript anzeigen" #: addons/block_code/ui/main_panel.tscn msgid "Delete Block Code" -msgstr "" +msgstr "Blockcode löschen" #: addons/block_code/ui/main_panel.tscn msgid "Toggle Block Picker (Ctrl+BackSlash)" @@ -791,7 +796,7 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "1.0x" -msgstr "" +msgstr "1,0 x" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "Select a node to create and edit block code." @@ -805,7 +810,7 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "Add Block Code" -msgstr "" +msgstr "Blockcode hinzufügen" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "\"{node}\" uses block coding." @@ -813,40 +818,40 @@ msgstr "" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "Open in Editor" -msgstr "" +msgstr "Im Editor öffnen" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "Override Block Code" -msgstr "" +msgstr "Blockcode überschreiben" #: addons/block_code/ui/blocks/block/block.gd msgid "Type:" -msgstr "" +msgstr "Typ:" #: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn msgid "Parameter" -msgstr "" +msgstr "Parameter" #: addons/block_code/ui/picker/categories/block_category_button.tscn msgid "Example" -msgstr "" +msgstr "Beispiel" #: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn #: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn msgid "Create New Variable" -msgstr "" +msgstr "Neue Variable erstellen" #: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn msgid "Create" -msgstr "" +msgstr "Erstellen" #: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn msgid "Name " -msgstr "" +msgstr "Name " #: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn msgid "Type " -msgstr "" +msgstr "Typ " #: addons/block_code/ui/script_window/script_window.tscn msgid "Block Code Generated GDScript" @@ -854,4 +859,4 @@ msgstr "" #: addons/block_code/ui/script_window/script_window.tscn msgid "Copy" -msgstr "" +msgstr "Kopieren" From 6a13a71869800d384b609005520a8c63c03b6a66 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Thu, 7 Nov 2024 14:57:32 +0000 Subject: [PATCH 70/98] Fix "Type::" double colon in block tooltip In commit 3e208d75ccb761d936b3126082407632dc09d7ec, the string "Type:" was extracted from the template string to be translated separately, including The colon. It is correct for the colon to be part of the translatable string, because (for example) in French there must be a non-breaking space between the word and the colon. However, there was also a stray colon in the template string. Remove it. --- addons/block_code/ui/blocks/block/block.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/block_code/ui/blocks/block/block.gd b/addons/block_code/ui/blocks/block/block.gd index 198df289..d8ebc64b 100644 --- a/addons/block_code/ui/blocks/block/block.gd +++ b/addons/block_code/ui/blocks/block/block.gd @@ -221,7 +221,7 @@ func _get_tooltip(at_position: Vector2) -> String: if definition.variant_type == Variant.Type.TYPE_NIL: return description_tx - return "{description}\n\n{type_field}: [b]{type}[/b]".format({"description": description_tx, "type_field": tr("Type:"), "type": type_string(definition.variant_type)}) + return "{description}\n\n{type_field} [b]{type}[/b]".format({"description": description_tx, "type_field": tr("Type:"), "type": type_string(definition.variant_type)}) func _make_custom_tooltip(for_text) -> Control: From 2e8f1f43411ba44a33ee8f712fd8a2a5d942924b Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Fri, 8 Nov 2024 11:40:59 +0000 Subject: [PATCH 71/98] pre-commit: Use release of godot-gdscript-toolkit The change in question was released in 4.3.0, released in August. --- .pre-commit-config.yaml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 283c650a..175dd6c6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -2,16 +2,13 @@ # See https://pre-commit.com/hooks.html for more hooks repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.6.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer - id: check-yaml - id: check-added-large-files - repo: https://github.com/Scony/godot-gdscript-toolkit - # Use this commit from the master branch until the next stable release with - # - rev: f836958a4487e31e3c5ab35c57c7a2128b7e2303 + rev: 4.3.3 hooks: - id: gdformat args: [--line-length=200] From c030f8e1223a9f1c173a10d1fc02c913c47cd9e8 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Fri, 8 Nov 2024 11:43:10 +0000 Subject: [PATCH 72/98] pre-commit: Update hooks version --- .pre-commit-config.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 175dd6c6..0b6a47d2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -2,6 +2,7 @@ # See https://pre-commit.com/hooks.html for more hooks repos: - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer From 4f257a6d4824e492d195d8f9c8a4f90885849299 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Fri, 8 Nov 2024 11:40:59 +0000 Subject: [PATCH 73/98] Add editorconfig file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A minimal editorconfig to set the file encoding keeps being added to my working copy – I think by Godot 4.4-dev3 – so let's commit it, and add some potentially-useful rules for editing .gd files in external editors. --- .editorconfig | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..ac1becab --- /dev/null +++ b/.editorconfig @@ -0,0 +1,8 @@ +root = true + +[*] +charset = utf-8 + +[*.gd] +indent_style = tab +max_line_length = 200 From 4603ca5d9ae3075362f2aa9bf37645816b4fe194 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Fri, 8 Nov 2024 11:47:17 +0000 Subject: [PATCH 74/98] ci: Cancel running checks when PR is updated See https://turso.tech/blog/simple-trick-to-save-environment-and-money-when-using-github-actions for rationale. --- .github/workflows/checks.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/checks.yaml b/.github/workflows/checks.yaml index 492c4015..12cd71c5 100644 --- a/.github/workflows/checks.yaml +++ b/.github/workflows/checks.yaml @@ -6,6 +6,11 @@ on: branches: - main +# Cancel any ongoing previous run if a PR is updated +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + jobs: pre-commit: name: Linting and Formatting From d1ff6c7638444d7bc44beca56036fff8621ff26f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Qui=C3=B1ones?= Date: Fri, 8 Nov 2024 12:10:16 -0300 Subject: [PATCH 75/98] Update GitHub issue templates This is an open-source plugin and now also developed in the open. Remove link to Endless Employees issue tracker. Edit the "public" template to be the sole issue template. --- .github/ISSUE_TEMPLATE/config.yml | 5 ----- .github/ISSUE_TEMPLATE/{public.yml => issue.yml} | 6 +++--- 2 files changed, 3 insertions(+), 8 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/config.yml rename .github/ISSUE_TEMPLATE/{public.yml => issue.yml} (85%) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 73011e50..00000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,5 +0,0 @@ -blank_issues_enabled: false -contact_links: - - name: Create Internal Task - url: https://phabricator.endlessm.com/tag/baby_godot/ - about: Endless OS Foundation employees, please use this tag on Phabricator diff --git a/.github/ISSUE_TEMPLATE/public.yml b/.github/ISSUE_TEMPLATE/issue.yml similarity index 85% rename from .github/ISSUE_TEMPLATE/public.yml rename to .github/ISSUE_TEMPLATE/issue.yml index 4e749039..d7c86765 100644 --- a/.github/ISSUE_TEMPLATE/public.yml +++ b/.github/ISSUE_TEMPLATE/issue.yml @@ -1,9 +1,9 @@ -name: Report Public Issue +name: Report Issue description: Report an issue with using the Godot Block Coding plugin body: - type: markdown attributes: - value: Thanks for taking the time to report an issue! If you're an employee of Endless OS Foundation, please track internal tasks [on Phabricator](https://phabricator.endlessm.com/tag/baby_godot/) instead. + value: Thanks for taking the time to report an issue! - type: textarea id: what-happened attributes: @@ -20,7 +20,7 @@ body: description: Can it be reliably reproduced, and if so, how? placeholder: | 1. Add a BlockCode child node - 2. Drag blocks X, Y, and Z to the editor + 2. Drag blocks X, Y, and Z to the editor 3. ... validations: required: true From be8f7f85bf592e84f29a60126d4b775b4a3a1349 Mon Sep 17 00:00:00 2001 From: Jian-Hong Pan Date: Mon, 11 Nov 2024 17:51:02 +0800 Subject: [PATCH 76/98] blocks_catalog: Introduce get_variable_(get|set)ter_block_definition() Extract the getter and setter block definition code from get_variable_block_definitions() as get_variable_getter_block_definition() and get_variable_setter_block_definition(). They can be used by more places latter. --- .../code_generation/blocks_catalog.gd | 43 +++++++++++++------ 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/addons/block_code/code_generation/blocks_catalog.gd b/addons/block_code/code_generation/blocks_catalog.gd index e4ece40d..4f8ca748 100644 --- a/addons/block_code/code_generation/blocks_catalog.gd +++ b/addons/block_code/code_generation/blocks_catalog.gd @@ -253,25 +253,40 @@ static func add_custom_blocks( static func get_variable_block_definitions(variables: Array[VariableDefinition]) -> Array[BlockDefinition]: var block_definitions: Array[BlockDefinition] = [] for variable: VariableDefinition in variables: - var type_string: String = Types.VARIANT_TYPE_TO_STRING[variable.var_type] + var block_def: BlockDefinition # Getter - var block_def = BlockDefinition.new() - block_def.name = "get_var_%s" % variable.var_name - block_def.category = "Variables" - block_def.type = Types.BlockType.VALUE - block_def.variant_type = variable.var_type - block_def.display_template = variable.var_name - block_def.code_template = variable.var_name + block_def = get_variable_getter_block_definition(variable) block_definitions.append(block_def) # Setter - block_def = BlockDefinition.new() - block_def.name = "set_var_%s" % variable.var_name - block_def.category = "Variables" - block_def.type = Types.BlockType.STATEMENT - block_def.display_template = "Set %s to {value: %s}" % [variable.var_name, type_string] - block_def.code_template = "%s = {value}" % [variable.var_name] + block_def = get_variable_setter_block_definition(variable) block_definitions.append(block_def) return block_definitions + + +static func get_variable_getter_block_definition(variable: VariableDefinition) -> BlockDefinition: + var block_def := BlockDefinition.new() + + block_def.name = "get_var_%s" % variable.var_name + block_def.category = "Variables" + block_def.type = Types.BlockType.VALUE + block_def.variant_type = variable.var_type + block_def.display_template = variable.var_name + block_def.code_template = variable.var_name + + return block_def + + +static func get_variable_setter_block_definition(variable: VariableDefinition) -> BlockDefinition: + var type_string: String = Types.VARIANT_TYPE_TO_STRING[variable.var_type] + var block_def := BlockDefinition.new() + + block_def.name = "set_var_%s" % variable.var_name + block_def.category = "Variables" + block_def.type = Types.BlockType.STATEMENT + block_def.display_template = "Set %s to {value: %s}" % [variable.var_name, type_string] + block_def.code_template = "%s = {value}" % [variable.var_name] + + return block_def From 98db5ef737d2bca49a06ef7684ef458e6c070fe1 Mon Sep 17 00:00:00 2001 From: Jian-Hong Pan Date: Mon, 11 Nov 2024 18:23:21 +0800 Subject: [PATCH 77/98] BlockCanvas: Introduce get_property_(get|set)ter_block_definition for drop object property The object property's getter & setter blocks generating code is similar to get_variable_(get|set)ter_block_definition(). So, reuse them within get_property_(get|set)ter_block_definition() to generate property's blocks including the description. And, the block name will change to: "(get|set)_var_". Fixes: 89beea94eefa ("BlockCanvas: Implement drag & drop the node's property from Inspector") https://phabricator.endlessm.com/T35649 --- .../code_generation/blocks_catalog.gd | 14 ++++++- .../ui/block_canvas/block_canvas.gd | 40 +++++-------------- 2 files changed, 22 insertions(+), 32 deletions(-) diff --git a/addons/block_code/code_generation/blocks_catalog.gd b/addons/block_code/code_generation/blocks_catalog.gd index 4f8ca748..683852bf 100644 --- a/addons/block_code/code_generation/blocks_catalog.gd +++ b/addons/block_code/code_generation/blocks_catalog.gd @@ -287,6 +287,18 @@ static func get_variable_setter_block_definition(variable: VariableDefinition) - block_def.category = "Variables" block_def.type = Types.BlockType.STATEMENT block_def.display_template = "Set %s to {value: %s}" % [variable.var_name, type_string] - block_def.code_template = "%s = {value}" % [variable.var_name] + block_def.code_template = "%s = {value}" % variable.var_name return block_def + + +static func get_property_getter_block_definition(variable: VariableDefinition) -> BlockDefinition: + var block_def := get_variable_getter_block_definition(variable) + block_def.description = "The %s property" % variable.var_name + return block_def + + +static func get_property_setter_block_definition(variable: VariableDefinition) -> BlockDefinition: + var block_def := get_variable_setter_block_definition(variable) + block_def.description = "Set the %s property" % variable.var_name + return block_def diff --git a/addons/block_code/ui/block_canvas/block_canvas.gd b/addons/block_code/ui/block_canvas/block_canvas.gd index 2f4fcc51..9bbbe7dd 100644 --- a/addons/block_code/ui/block_canvas/block_canvas.gd +++ b/addons/block_code/ui/block_canvas/block_canvas.gd @@ -3,6 +3,7 @@ extends MarginContainer const ASTList = preload("res://addons/block_code/code_generation/ast_list.gd") const BlockAST = preload("res://addons/block_code/code_generation/block_ast.gd") +const BlocksCatalog = preload("res://addons/block_code/code_generation/blocks_catalog.gd") const BlockCodePlugin = preload("res://addons/block_code/block_code_plugin.gd") const BlockDefinition = preload("res://addons/block_code/code_generation/block_definition.gd") const BlockTreeUtil = preload("res://addons/block_code/ui/block_tree_util.gd") @@ -10,6 +11,7 @@ const DragManager = preload("res://addons/block_code/drag_manager/drag_manager.g const ScriptGenerator = preload("res://addons/block_code/code_generation/script_generator.gd") const Types = preload("res://addons/block_code/types/types.gd") const Util = preload("res://addons/block_code/ui/util.gd") +const VariableDefinition = preload("res://addons/block_code/code_generation/variable_definition.gd") const EXTEND_MARGIN: float = 800 const BLOCK_AUTO_PLACE_MARGIN: Vector2 = Vector2(25, 8) @@ -124,44 +126,20 @@ func _drop_node(at_position: Vector2, data: Variant) -> void: func _drop_obj_property(at_position: Vector2, data: Variant) -> void: - var object_name = str(data["object"]).get_slice(":", 0) var property_name = data["property"] var property_value = data["value"] + var is_getter = !_modifier_ctrl # Prepare a Variable block to set / get the property's value according to # the modifier KEY_CTRL pressing. + var variable := VariableDefinition.new(property_name, typeof(property_value)) var block_definition: BlockDefinition - var property_type = typeof(property_value) - if _modifier_ctrl: - var type_string: String = Types.VARIANT_TYPE_TO_STRING[property_type] - block_definition = ( - BlockDefinition - . new( - &"%s_set_%s" % [object_name, property_name], - object_name, - "Set the %s property" % property_name, - "Variables", - Types.BlockType.STATEMENT, - property_type, - "set %s to {value: %s}" % [property_name.capitalize().to_lower(), type_string], - "%s = {value}" % property_name, - {"value": property_value}, - ) - ) + + if is_getter: + block_definition = BlocksCatalog.get_property_getter_block_definition(variable) else: - block_definition = ( - BlockDefinition - . new( - &"%s_get_%s" % [object_name, property_name], - object_name, - "The %s property" % property_name, - "Variables", - Types.BlockType.VALUE, - property_type, - "%s" % property_name.capitalize().to_lower(), - "%s" % property_name, - ) - ) + block_definition = BlocksCatalog.get_property_setter_block_definition(variable) + block_definition.defaults = {"value": property_value} var block = _context.block_script.instantiate_block(block_definition) add_block(block, at_position) From 3b0aa951026fa229808120fb4d39ed4df5a264ef Mon Sep 17 00:00:00 2001 From: Jian-Hong Pan Date: Thu, 14 Nov 2024 14:03:07 +0800 Subject: [PATCH 78/98] BlockScriptSerialization: Build the bidirectional link between the block code node and script Build the bidirectional link between the block code node and the block script. So, the block script can access this block node and the parent node later easily. https://phabricator.endlessm.com/T35649 --- addons/block_code/block_code_node/block_code.gd | 14 +++++++++++++- .../serialization/block_script_serialization.gd | 2 ++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/addons/block_code/block_code_node/block_code.gd b/addons/block_code/block_code_node/block_code.gd index 659719c9..6ea295ba 100644 --- a/addons/block_code/block_code_node/block_code.gd +++ b/addons/block_code/block_code_node/block_code.gd @@ -5,7 +5,8 @@ extends Node const TxUtils := preload("res://addons/block_code/translation/utils.gd") -@export var block_script: BlockScriptSerialization = null +@export var block_script: BlockScriptSerialization = null: + set = _set_block_script func _init(): @@ -37,6 +38,17 @@ func _enter_tree(): block_script = new_block_script +func _set_block_script(value): + if value == null: + # Wipe out the bidirectional link between this block code node and the + # block script + if block_script: + block_script.block_code_node = null + else: + value.block_code_node = self + block_script = value + + func _update_parent_script(): if Engine.is_editor_hint(): push_error("Updating the parent script must happen in game.") diff --git a/addons/block_code/serialization/block_script_serialization.gd b/addons/block_code/serialization/block_script_serialization.gd index 5f3051e3..e0847f02 100644 --- a/addons/block_code/serialization/block_script_serialization.gd +++ b/addons/block_code/serialization/block_script_serialization.gd @@ -28,6 +28,8 @@ const SCENE_PER_TYPE = { @export var generated_script: String @export var version: int +var block_code_node: BlockCode + var _available_blocks: Array[BlockDefinition] var _categories: Array[BlockCategory] From d01a65b23346ad9aa8dd2b989abeea1eb4cdc613 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Thu, 14 Nov 2024 12:31:14 +0000 Subject: [PATCH 79/98] Add Polish translation from Transifex --- addons/block_code/locale/pl.po | 314 ++++++++++++++++++--------------- 1 file changed, 173 insertions(+), 141 deletions(-) diff --git a/addons/block_code/locale/pl.po b/addons/block_code/locale/pl.po index 61e7281a..cff3553c 100644 --- a/addons/block_code/locale/pl.po +++ b/addons/block_code/locale/pl.po @@ -158,10 +158,14 @@ # # FIRST AUTHOR , YEAR. # +# Translators: +# Tomasz Chabora, 2024 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: Block Coding Plugin\n" +"Last-Translator: Tomasz Chabora, 2024\n" "Language-Team: Polish (https://app.transifex.com/endless-os/teams/9016/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -171,11 +175,11 @@ msgstr "" #: addons/block_code/block_code_plugin.gd msgid "Regenerate %s POT file" -msgstr "" +msgstr "Regeneruj plik POT %s" #: addons/block_code/block_code_plugin.gd msgid "Update %s translated files" -msgstr "" +msgstr "Aktualizuj pliki tłumaczenia %s" #: addons/block_code/blocks/communication/add_node_to_group.tres #: addons/block_code/blocks/communication/add_to_group.tres @@ -184,23 +188,23 @@ msgstr "" #: addons/block_code/blocks/communication/remove_from_group.tres #: addons/block_code/blocks/communication/remove_node_from_group.tres msgid "Communication | Groups" -msgstr "" +msgstr "Komunikacja | Grupy" #: addons/block_code/blocks/communication/add_node_to_group.tres msgid "Add the node into the group" -msgstr "" +msgstr "Dodaj węzeł do grupy" #: addons/block_code/blocks/communication/add_node_to_group.tres msgid "add {node: OBJECT} to group {group: STRING}" -msgstr "" +msgstr "dodaj {node: OBJECT} do grupy {group: STRING}" #: addons/block_code/blocks/communication/add_to_group.tres msgid "Add this node into the group" -msgstr "" +msgstr "Dodaj ten węzeł do grupy" #: addons/block_code/blocks/communication/add_to_group.tres msgid "add to group {group: STRING}" -msgstr "" +msgstr "dodaj do grupy {group: STRING}" #: addons/block_code/blocks/communication/area2d_on_entered.tres #: addons/block_code/blocks/communication/area2d_on_exited.tres @@ -210,173 +214,173 @@ msgstr "" #: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres #: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres msgid "Communication | Methods" -msgstr "" +msgstr "Komunikacja | Metody" #: addons/block_code/blocks/communication/area2d_on_entered.tres #: addons/block_code/blocks/communication/rigidbody2d_on_entered.tres msgid "when this node collides with [something: OBJECT]" -msgstr "" +msgstr "kiedy ten węzeł kolizuje z [something: OBJECT]" #: addons/block_code/blocks/communication/area2d_on_exited.tres #: addons/block_code/blocks/communication/rigidbody2d_on_exited.tres msgid "when this node stops colliding with [something: OBJECT]" -msgstr "" +msgstr "kiedy ten węzeł przestaje kolidować z [something: OBJECT]" #: addons/block_code/blocks/communication/call_method_group.tres msgid "Calls the method/function on each member of the given group" -msgstr "" +msgstr "Woła metodę/funkcję na każdym członku danej grupy" #: addons/block_code/blocks/communication/call_method_group.tres msgid "call method {method_name: STRING} in group {group: STRING}" -msgstr "" +msgstr "wywołaj metodę {method_name: STRING} w grupie{group: STRING}" #: addons/block_code/blocks/communication/call_method_node.tres msgid "Calls the method/function of the given node" -msgstr "" +msgstr "Woła metodę/funkcję danego węzła" #: addons/block_code/blocks/communication/call_method_node.tres msgid "call method {method_name: STRING} on node {node: OBJECT}" -msgstr "" +msgstr "wywołaj metodę {method_name: STRING} w węźle {node: OBJECT}" #: addons/block_code/blocks/communication/define_method.tres msgid "Define a method/function with following statements" -msgstr "" +msgstr "Definiuj metodę/funkcję z następującymi wyrażeniami" #: addons/block_code/blocks/communication/define_method.tres msgid "define method {method_name: STRING_NAME}" -msgstr "" +msgstr "zdefiniuj metodę {method_name: STRING_NAME}" #: addons/block_code/blocks/communication/get_node.tres msgid "Communication | Nodes" -msgstr "" +msgstr "Komunikacja | Węzły" #: addons/block_code/blocks/communication/get_node.tres msgid "Get the node at the given path" -msgstr "" +msgstr "Pobierz węzeł w danej ścieżce" #: addons/block_code/blocks/communication/get_node.tres msgid "{path: NIL}" -msgstr "" +msgstr "{path: NIL}" #: addons/block_code/blocks/communication/is_in_group.tres msgid "Is this node in the group" -msgstr "" +msgstr "Czy ten węzeł jest w grupie" #: addons/block_code/blocks/communication/is_in_group.tres msgid "is in group {group: STRING}" -msgstr "" +msgstr "jest w grupie {group: STRING}" #: addons/block_code/blocks/communication/is_node_in_group.tres msgid "Is the node in the group" -msgstr "" +msgstr "Czy węzeł jest w grupie" #: addons/block_code/blocks/communication/is_node_in_group.tres msgid "{node: OBJECT} is in group {group: STRING}" -msgstr "" +msgstr "{node: OBJECT} jest w grupie {group: STRING}" #: addons/block_code/blocks/communication/remove_from_group.tres msgid "Remove this node from the group" -msgstr "" +msgstr "Usuń ten węzeł z grupy" #: addons/block_code/blocks/communication/remove_from_group.tres msgid "remove from group {group: STRING}" -msgstr "" +msgstr "usuń z grupy {group: STRING}" #: addons/block_code/blocks/communication/remove_node_from_group.tres msgid "Remove the node from the group" -msgstr "" +msgstr "Usuń węzeł z grupy" #: addons/block_code/blocks/communication/remove_node_from_group.tres msgid "remove {node: OBJECT} from group {group: NIL}" -msgstr "" +msgstr "usuń {node: OBJECT} z grupy {group: NIL}" #: addons/block_code/blocks/graphics/animationplayer_is_playing.tres #: addons/block_code/blocks/graphics/animationplayer_pause.tres #: addons/block_code/blocks/graphics/animationplayer_play.tres #: addons/block_code/blocks/graphics/animationplayer_stop.tres msgid "Graphics | Animation" -msgstr "" +msgstr "Grafika | Animacja" #: addons/block_code/blocks/graphics/animationplayer_is_playing.tres msgid "Check if an animation is currently playing." -msgstr "" +msgstr "Sprawdź czy animacja aktualnie się odtwarza." #: addons/block_code/blocks/graphics/animationplayer_is_playing.tres msgid "is playing" -msgstr "" +msgstr "jest odtwarzana" #: addons/block_code/blocks/graphics/animationplayer_pause.tres msgid "Pause the currently playing animation." -msgstr "" +msgstr "Zapauzuj aktualnie odtwarzaną animację." #: addons/block_code/blocks/graphics/animationplayer_pause.tres msgid "pause" -msgstr "" +msgstr "pauzuj" #: addons/block_code/blocks/graphics/animationplayer_play.tres msgid "Play the animation." -msgstr "" +msgstr "Odtwórz animację." #: addons/block_code/blocks/graphics/animationplayer_play.tres msgid "play {animation: STRING} {direction: NIL} {wait_mode: NIL}" -msgstr "" +msgstr "odtwórz {animation: STRING} {direction: NIL} {wait_mode: NIL}" #: addons/block_code/blocks/graphics/animationplayer_stop.tres msgid "Stop the currently playing animation." -msgstr "" +msgstr "Zatrzymaj aktualnie odtwarzaną animację." #: addons/block_code/blocks/graphics/animationplayer_stop.tres #: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres msgid "stop" -msgstr "" +msgstr "zatrzymaj" #: addons/block_code/blocks/graphics/viewport_center.tres #: addons/block_code/blocks/graphics/viewport_height.tres #: addons/block_code/blocks/graphics/viewport_width.tres msgid "Graphics | Viewport" -msgstr "" +msgstr "Grafika | Rzutnia" #: addons/block_code/blocks/graphics/viewport_center.tres msgid "Coordinates of the middle of the viewable screen when playing." -msgstr "" +msgstr "Koodrynuje ścrodek widocznego ekranu podczas grania." #: addons/block_code/blocks/graphics/viewport_center.tres msgid "viewport center" -msgstr "" +msgstr "środek rzutni" #: addons/block_code/blocks/graphics/viewport_height.tres msgid "How tall the viewable screen is when playing." -msgstr "" +msgstr "Jak wysoki jest widoczny ekran podczas grania." #: addons/block_code/blocks/graphics/viewport_height.tres msgid "viewport height" -msgstr "" +msgstr "wysokość rzutni" #: addons/block_code/blocks/graphics/viewport_width.tres msgid "How wide the viewable screen is when playing." -msgstr "" +msgstr "Jak szeroki jest widoczny ekran podczas grania." #: addons/block_code/blocks/graphics/viewport_width.tres msgid "viewport width" -msgstr "" +msgstr "szerokość rzutni" #: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres #: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres msgid "Physics | Velocity" -msgstr "" +msgstr "Fizyka | Prędkość" #: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres msgid "True if the character is on the floor." -msgstr "" +msgstr "Prawda, jeśli postać jest na podłodze." #: addons/block_code/blocks/input/characterbody2d_is_on_floor.tres msgid "is on floor" -msgstr "" +msgstr "jest na podłodze" #: addons/block_code/blocks/input/characterbody2d_move.tres #: addons/block_code/blocks/input/is_input_actioned.tres msgid "Input" -msgstr "" +msgstr "Sterowanie" #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" @@ -384,130 +388,136 @@ msgid "" "given keys. The speed of movement can be adjusted separately for x (left and" " right) and y (up and down)." msgstr "" +"Porusz postacią w górę, dół, lewo i prawo za pomocą klawiatury, używając " +"danych klawiszy. Szybkość poruszania może być dopasowana oddzielnie dla x " +"(lewo i prawo) oraz y (góra i dół)." #: addons/block_code/blocks/input/characterbody2d_move.tres msgid "" "move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} at" " speed {speed: VECTOR2}" msgstr "" +"poruszaj się klawiszami {up: STRING} {down: STRING} {left: STRING} {right: " +"STRING} z szybkością {speed: VECTOR2}" #: addons/block_code/blocks/input/is_input_actioned.tres msgid "True if the specified input action has been pressed or released." -msgstr "" +msgstr "Prawda, jeśli podana akcja została wciśnięta lub puszczona." #: addons/block_code/blocks/input/is_input_actioned.tres msgid "action {action_name: STRING_NAME} is {action: NIL}" -msgstr "" +msgstr "akcja {action_name: STRING_NAME} jest {action: NIL}" #: addons/block_code/blocks/lifecycle/process.tres #: addons/block_code/blocks/lifecycle/queue_free.tres #: addons/block_code/blocks/lifecycle/queue_free_node.tres #: addons/block_code/blocks/lifecycle/ready.tres msgid "Lifecycle" -msgstr "" +msgstr "Cykl działania" #: addons/block_code/blocks/lifecycle/process.tres msgid "" "Attached blocks will be executed during the processing step of the main loop" msgstr "" +"Dołączone bloki będą wykonywane podczas kroku przetwarzania pętli głównej" #: addons/block_code/blocks/lifecycle/process.tres msgid "every frame" -msgstr "" +msgstr "każda klatka" #: addons/block_code/blocks/lifecycle/queue_free.tres msgid "Queues this node to be deleted at the end of the current frame" -msgstr "" +msgstr "Kolejkuje usunięcie tego węzła na końcu aktualnej klatki" #: addons/block_code/blocks/lifecycle/queue_free.tres msgid "remove" -msgstr "" +msgstr "usuń" #: addons/block_code/blocks/lifecycle/queue_free_node.tres msgid "Queues the given node to be deleted at the end of the current frame" -msgstr "" +msgstr "Kolejkuje usunięcie podanego węzła na końcu aktualnej klatki" #: addons/block_code/blocks/lifecycle/queue_free_node.tres msgid "remove {node: OBJECT}" -msgstr "" +msgstr "usuń {node: OBJECT}" #: addons/block_code/blocks/lifecycle/ready.tres msgid "Attached blocks will be executed once when the node is \"ready\"" -msgstr "" +msgstr "Dołączone bloki będą wykonane raz, kiedy węzeł jest \"gotowy\"" #: addons/block_code/blocks/lifecycle/ready.tres msgid "when starting" -msgstr "" +msgstr "na początku" #: addons/block_code/blocks/log/breakpoint.tres #: addons/block_code/blocks/log/concat.tres #: addons/block_code/blocks/log/print.tres msgid "Log" -msgstr "" +msgstr "Dziennik" #: addons/block_code/blocks/log/breakpoint.tres msgid "Pause execution and show the current line of code in the debugger." -msgstr "" +msgstr "Zapauzuj wykonywanie i pokaż aktualną linijkę kodu w debugerze" #: addons/block_code/blocks/log/breakpoint.tres msgid "breakpoint" -msgstr "" +msgstr "punkt wstrzymania" #: addons/block_code/blocks/log/concat.tres msgid "{string1: STRING} + {string2: STRING}" -msgstr "" +msgstr "{string1: STRING} + {string2: STRING}" #: addons/block_code/blocks/log/print.tres msgid "Print the text to output" -msgstr "" +msgstr "Wypisz tekst do konsoli" #: addons/block_code/blocks/log/print.tres msgid "log text {text: STRING}" -msgstr "" +msgstr "wypisz tekst {text: STRING}" #: addons/block_code/blocks/logic/and.tres #: addons/block_code/blocks/logic/not.tres #: addons/block_code/blocks/logic/or.tres msgid "Logic | Boolean" -msgstr "" +msgstr "Logika | Prawda/Fałsz" #: addons/block_code/blocks/logic/and.tres msgid "{bool1: BOOL} and {bool2: BOOL}" -msgstr "" +msgstr "{bool1: BOOL} oraz {bool2: BOOL}" #: addons/block_code/blocks/logic/compare.tres msgid "Logic | Comparison" -msgstr "" +msgstr "Logika | Porównanie" #: addons/block_code/blocks/logic/compare.tres msgid "{float1: FLOAT} {op: NIL} {float2: FLOAT}" -msgstr "" +msgstr "{float1: FLOAT} {op: NIL} {float2: FLOAT}" #: addons/block_code/blocks/logic/else.tres #: addons/block_code/blocks/logic/else_if.tres #: addons/block_code/blocks/logic/if.tres msgid "Logic | Conditionals" -msgstr "" +msgstr "Logika | Warunki" #: addons/block_code/blocks/logic/else.tres msgid "else" -msgstr "" +msgstr "inaczej" #: addons/block_code/blocks/logic/else_if.tres msgid "else if {condition: BOOL}" -msgstr "" +msgstr "inaczej jeśli {condition: BOOL}" #: addons/block_code/blocks/logic/if.tres msgid "if {condition: BOOL}" -msgstr "" +msgstr "jeśli {condition: BOOL}" #: addons/block_code/blocks/logic/not.tres msgid "not {bool: BOOL}" -msgstr "" +msgstr "nie{bool: BOOL}" #: addons/block_code/blocks/logic/or.tres msgid "{bool1: BOOL} or {bool2: BOOL}" -msgstr "" +msgstr "{bool1: BOOL} lub {bool2: BOOL}" #: addons/block_code/blocks/loops/await_scene_ready.tres #: addons/block_code/blocks/loops/break.tres @@ -515,27 +525,27 @@ msgstr "" #: addons/block_code/blocks/loops/for.tres #: addons/block_code/blocks/loops/while.tres msgid "Loops" -msgstr "" +msgstr "Pętle" #: addons/block_code/blocks/loops/await_scene_ready.tres msgid "wait for the scene to be ready" -msgstr "" +msgstr "czekaj, aż scena będzie gotowa" #: addons/block_code/blocks/loops/break.tres msgid "break" -msgstr "" +msgstr "przerwij" #: addons/block_code/blocks/loops/continue.tres msgid "continue" -msgstr "" +msgstr "kontynuuj" #: addons/block_code/blocks/loops/for.tres msgid "Run the connected blocks [i]number[/i] times" -msgstr "" +msgstr "Uruchom połączone bloki [i]ilośc[/i] razy" #: addons/block_code/blocks/loops/for.tres msgid "repeat {number: INT}" -msgstr "" +msgstr "powtórz {number: INT}" #: addons/block_code/blocks/loops/while.tres msgid "" @@ -543,10 +553,13 @@ msgid "" "\n" "Hint: snap a [b]Comparison[/b] block into the condition." msgstr "" +"Uruchom połaczone bloki dopóki [i]warunek[/i] jest prawdziwy.\n" +"\n" +"Wskazówka: wrzuć blok [b]Porównania[/b] w warunek." #: addons/block_code/blocks/loops/while.tres msgid "while {condition: BOOL}" -msgstr "" +msgstr "dopóki {condition: BOOL}" #: addons/block_code/blocks/math/add.tres #: addons/block_code/blocks/math/cos.tres @@ -564,41 +577,43 @@ msgstr "" #: addons/block_code/blocks/math/vector_multiply.tres #: addons/block_code/blocks/variables/vector2.tres msgid "Math" -msgstr "" +msgstr "Matematyka" #: addons/block_code/blocks/math/add.tres msgid "{a: FLOAT} + {b: FLOAT}" -msgstr "" +msgstr "{a: FLOAT} + {b: FLOAT}" #: addons/block_code/blocks/math/cos.tres msgid "Calculate the cosine of [i]angle[/i]" -msgstr "" +msgstr "Policz kosinus [i]kąta[/i]" #: addons/block_code/blocks/math/cos.tres msgid "cos {angle: FLOAT}" -msgstr "" +msgstr "cos {angle: FLOAT}" #: addons/block_code/blocks/math/divide.tres msgid "{a: FLOAT} / {b: FLOAT}" -msgstr "" +msgstr "{a: FLOAT} / {b: FLOAT}" #: addons/block_code/blocks/math/multiply.tres msgid "{a: FLOAT} * {b: FLOAT}" -msgstr "" +msgstr "{a: FLOAT} * {b: FLOAT}" #: addons/block_code/blocks/math/pow.tres msgid "{base: FLOAT} ^ {exp: FLOAT}" -msgstr "" +msgstr "{base: FLOAT} ^ {exp: FLOAT}" #: addons/block_code/blocks/math/randf_range.tres msgid "" "Generate a random floating point number between [i]from[/i] and [i]to[/i] " "inclusively" msgstr "" +"Generuj losową zmiennoprzecinkową liczbę pomiędzy [i]od[/i], a [i]do[/i], " +"włącznie. " #: addons/block_code/blocks/math/randf_range.tres msgid "random floating point number between {from: FLOAT} and {to: FLOAT}" -msgstr "" +msgstr "losowa zmiennoprzecinkowa licza pomiędzy {from: FLOAT} i {to: FLOAT}" #: addons/block_code/blocks/math/randi_range.tres msgid "" @@ -606,68 +621,73 @@ msgid "" "[i]to[/i] inclusively. [i]from[/i] and [i]to[/i] can be a negative or " "positive number" msgstr "" +"Generuj losową znakowaną 32-bitową liczbę całkowitą pomiędzy [i]od[/i], a " +"[i]do[/i], włącznie. [i]od[/i] oraz [i]do[/i] może być liczbą ujemną albo " +"dodatnią." #: addons/block_code/blocks/math/randi_range.tres msgid "random integer number between {from: INT} and {to: INT}" -msgstr "" +msgstr "losowa liczba całkowita pomiędzy {from: INT}, a {to: INT}" #: addons/block_code/blocks/math/sin.tres msgid "Calculate the sine of [i]angle[/i]" -msgstr "" +msgstr "Policz sinus [i]kąta[/i]" #: addons/block_code/blocks/math/sin.tres msgid "sin {angle: FLOAT}" -msgstr "" +msgstr "sin {angle: FLOAT}" #: addons/block_code/blocks/math/subtract.tres msgid "{a: FLOAT} - {b: FLOAT}" -msgstr "" +msgstr "{a: FLOAT} - {b: FLOAT}" #: addons/block_code/blocks/math/tan.tres msgid "Calculate the tangent of [i]angle[/i]" -msgstr "" +msgstr "Policz tanges [i]kąta[/i]" #: addons/block_code/blocks/math/tan.tres msgid "tan {angle: FLOAT}" -msgstr "" +msgstr "tan {angle: FLOAT}" #: addons/block_code/blocks/math/vector2_x.tres msgid "Gives the x of a [i]Vector2[/i]" -msgstr "" +msgstr "Zwraca x z [i]Vector2[/i]" #: addons/block_code/blocks/math/vector2_x.tres msgid "x of {vector2: VECTOR2}" -msgstr "" +msgstr "x z {vector2: VECTOR2}" #: addons/block_code/blocks/math/vector2_y.tres msgid "Gives the y of a [i]Vector2[/i]" -msgstr "" +msgstr "Zwraca y z [i]Vector2[/i]" #: addons/block_code/blocks/math/vector2_y.tres msgid "y of {vector2: VECTOR2}" -msgstr "" +msgstr "y z {vector2: VECTOR2}" #: addons/block_code/blocks/math/vector_from_angle.tres msgid "Creates a unit Vector2 rotated to the given angle in radians." -msgstr "" +msgstr "Tworzy jednostkowy Vector2 obrócony o dany kąt w radianach" #: addons/block_code/blocks/math/vector_from_angle.tres msgid "vector from {angle: FLOAT}" -msgstr "" +msgstr "wektor z {angle: FLOAT}" #: addons/block_code/blocks/math/vector_multiply.tres msgid "" "Multiplies a vector with a number. Use this, for example, to get a point " "some distance away along an angle." msgstr "" +"Mnoży wektor z liczbą. Użyj tego, na przykład, by dostać jakiś dystans " +"wzdłuż kąta." #: addons/block_code/blocks/math/vector_multiply.tres msgid "multiply {vector: VECTOR2} by {number: FLOAT}" -msgstr "" +msgstr "pomnóż {vector: VECTOR2} przez {number: FLOAT}" #: addons/block_code/blocks/physics/characterbody2d_move_and_slide.tres msgid "move and slide" -msgstr "" +msgstr "porusz i ślizgaj" #: addons/block_code/blocks/sounds/audiostreamplayer_play.tres #: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres @@ -676,86 +696,88 @@ msgstr "" #: addons/block_code/blocks/sounds/play_sound.tres #: addons/block_code/blocks/sounds/stop_sound.tres msgid "Sounds" -msgstr "" +msgstr "Dźwięki" #: addons/block_code/blocks/sounds/audiostreamplayer_play.tres msgid "Play the audio stream" -msgstr "" +msgstr "Odtwórz strumień audio" #: addons/block_code/blocks/sounds/audiostreamplayer_play.tres msgid "play" -msgstr "" +msgstr "odtwórz" #: addons/block_code/blocks/sounds/audiostreamplayer_stop.tres #: addons/block_code/blocks/sounds/stop_sound.tres msgid "Stop the audio stream" -msgstr "" +msgstr "Zatrzymaj strumień audio" #: addons/block_code/blocks/sounds/load_sound.tres msgid "Load a resource file as the audio stream" -msgstr "" +msgstr "Wczytaj plik zasobu jako strumień audio" #: addons/block_code/blocks/sounds/load_sound.tres msgid "load file {file_path: STRING} as sound {name: STRING}" -msgstr "" +msgstr "wczytaj plik {file_path: STRING} jako dźwięk {name: STRING}" #: addons/block_code/blocks/sounds/pause_continue_sound.tres msgid "Pause/Continue the audio stream" -msgstr "" +msgstr "Zapauzuj/kontynuuj strumień audio" #: addons/block_code/blocks/sounds/pause_continue_sound.tres msgid "{pause: NIL} the sound {name: STRING}" -msgstr "" +msgstr "{pause: NIL} dźwięk {name: STRING}" #: addons/block_code/blocks/sounds/play_sound.tres msgid "Play the audio stream with volume and pitch" -msgstr "" +msgstr "Odtwórz strumień audio z głośnością i wysokością" #: addons/block_code/blocks/sounds/play_sound.tres msgid "" "play the sound {name: STRING} with volume {db: FLOAT} dB and pitch scale " "{pitch: FLOAT}" msgstr "" +"odtwórz dźwięk {name: STRING} z głośnością {db: FLOAT} dB i skalą wysokości " +"{pitch: FLOAT}" #: addons/block_code/blocks/sounds/stop_sound.tres msgid "stop the sound {name: STRING}" -msgstr "" +msgstr "zatrzymaj dźwięk {name: STRING}" #: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres msgid "Lifecycle | Spawn" -msgstr "" +msgstr "Cykl działania | Przyzywanie" #: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres msgid "Emitted when all active particles have finished processing." -msgstr "" +msgstr "Emitowany, kiedy wszystkie cząsteczki skończyły się przetwarzać." #: addons/block_code/blocks/spawn/cpuparticles2d_finished.tres msgid "when particles are finished" -msgstr "" +msgstr "kiedy cząsteczki są zakończone" #: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres msgid "Transform | Position" -msgstr "" +msgstr "Transformacja | Pozycja" #: addons/block_code/blocks/transform/rigidbody2d_physics_position.tres msgid "set physics position {position: VECTOR2}" -msgstr "" +msgstr "ustaw pozycję fizyki {position: VECTOR2}" #: addons/block_code/blocks/ui/label_set_text.tres msgid "UI" -msgstr "" +msgstr "UI" #: addons/block_code/blocks/ui/label_set_text.tres msgid "Set the text for the label." -msgstr "" +msgstr "Ustaw tekst dla etykiety." #: addons/block_code/blocks/ui/label_set_text.tres msgid "set text to {text: STRING}" -msgstr "" +msgstr "ustaw text na {text: STRING}" #: addons/block_code/blocks/variables/vector2.tres msgid "vector2 x: {x: FLOAT} y: {y: FLOAT}" -msgstr "" +msgstr "vector2 x: {x: FLOAT} y: {y: FLOAT}" #: addons/block_code/examples/spawner/spawner.tscn msgid "" @@ -768,90 +790,100 @@ msgid "" "\n" "Color balls remove themselves after 3 seconds. While uncolored balls are only removed by the SimpleSpawner node according to the limit setings." msgstr "" +"[b]Strzałka w górę:[/b] Zacznij/przestań przyzywać.\n" +"[b]Strzałka w dół:[/b] Przyzwij raz.\n" +"[b]Strzałka w lewo:[/b] Zmniejsz częstotliwość przyzywania.\n" +"[b]Strzałka w prawo:[/b] Zwiększ częstotliwość przyzywania.\n" +"\n" +"Z inspektora: Spróbuj zmienić limit przyzywania i zachowanie limitu przyzywania.\n" +"\n" +"Kolorowe piłki usuwają się same po 3 sekundach, podczas gdy niekolorowe piłki są usuwane tylko przez węzeł SimpleSpawner zgodnie z ustawieniami limitów." #: addons/block_code/inspector_plugin/block_script_inspector.gd msgid "Open Block Script" -msgstr "" +msgstr "Otwórz Skrypt Blokowy" #: addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd msgid "0" -msgstr "" +msgstr "0" #: addons/block_code/ui/main_panel.tscn msgid "Show Generated Script" -msgstr "" +msgstr "Pokaż wygenerowany skrypt" #: addons/block_code/ui/main_panel.tscn msgid "Delete Block Code" -msgstr "" +msgstr "Usuń Kod Blokowy" #: addons/block_code/ui/main_panel.tscn msgid "Toggle Block Picker (Ctrl+BackSlash)" -msgstr "" +msgstr "Przełącz pobieracz bloków (Ctrl+BackSlash)" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "1.0x" -msgstr "" +msgstr "1.0x" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "Select a node to create and edit block code." -msgstr "" +msgstr "Wybierz węzeł, by utworzyć i edytować kod blokowy." #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "" "Use block coding to create custom behavior and game mechanics for " "\"{node}\"." msgstr "" +"Użyj kodowania blokowego, by utworzyć własne zachowanie i mechaniki dla " +"\"{node}\"." #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "Add Block Code" -msgstr "" +msgstr "Dodaj Kod Blokowy" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "\"{node}\" uses block coding." -msgstr "" +msgstr "\"{node}\" używa kodowania blokowego." #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "Open in Editor" -msgstr "" +msgstr "Otwórz w edytorze" #: addons/block_code/ui/block_canvas/block_canvas.tscn msgid "Override Block Code" -msgstr "" +msgstr "Nadpisz Kod Blokowy" #: addons/block_code/ui/blocks/block/block.gd msgid "Type:" -msgstr "" +msgstr "Typ:" #: addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn msgid "Parameter" -msgstr "" +msgstr "Parametr" #: addons/block_code/ui/picker/categories/block_category_button.tscn msgid "Example" -msgstr "" +msgstr "Przykład" #: addons/block_code/ui/picker/categories/variable_category/create_variable_button.tscn #: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn msgid "Create New Variable" -msgstr "" +msgstr "Utwórz nową zmienną" #: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn msgid "Create" -msgstr "" +msgstr "Utwórz" #: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn msgid "Name " -msgstr "" +msgstr "Nazwa" #: addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.tscn msgid "Type " -msgstr "" +msgstr "Typ" #: addons/block_code/ui/script_window/script_window.tscn msgid "Block Code Generated GDScript" -msgstr "" +msgstr "Wygenerowany GDScript z Kodu Blokowego" #: addons/block_code/ui/script_window/script_window.tscn msgid "Copy" -msgstr "" +msgstr "Kopiuj" From c7062ba57520dc938cea6fe48dc88daa7357fe10 Mon Sep 17 00:00:00 2001 From: Jian-Hong Pan Date: Mon, 11 Nov 2024 18:27:29 +0800 Subject: [PATCH 80/98] BlockScriptSerialization: Re-generate block definition for object property blocks The drag & drop object property's blocks disappear after save & re-open the Godot project. And, shows error: core/variant/variant_utility.cpp:1092 - Cannot construct block from null block definition. res://addons/block_code/ui/block_canvas/block_canvas.gd:348 - Invalid call. Nonexistent function 'set_parameter_values_on_ready' in base 'Nil'. It is because the object property blocks are not the predefined blocks in the catalog. So, Block Coding plugin cannot find the block definition from the catalog when places the object property blocks into the cavas via _block_to_ast_node() after re-open the project. Therefore, introduce _get_obj_property_block_definition() generating object property's getter/setter block definition for get_block_definition(). Besides, it also needs the object property's value type. So, visit the block code node's parent node to finding the property by _get_parent_node_property_info() to have the type. https://phabricator.endlessm.com/T35649 --- .../block_script_serialization.gd | 67 ++++++++++++++++--- 1 file changed, 57 insertions(+), 10 deletions(-) diff --git a/addons/block_code/serialization/block_script_serialization.gd b/addons/block_code/serialization/block_script_serialization.gd index e0847f02..3d6210a5 100644 --- a/addons/block_code/serialization/block_script_serialization.gd +++ b/addons/block_code/serialization/block_script_serialization.gd @@ -83,22 +83,26 @@ func instantiate_block_by_name(block_name: String) -> Block: func get_block_definition(block_name: String) -> BlockDefinition: var split := block_name.split(":", true, 1) + var block_definition: BlockDefinition if len(split) > 1: return _get_parameter_block_definition(split[0], split[1]) - var block_definition = _get_base_block_definition(block_name) + block_definition = _get_base_block_definition(block_name) + if block_definition != null: + return block_definition - if block_definition == null: - # FIXME: This is a workaround for old-style output block references. - # These were generated ahead of time using a block name that has - # a "_" before the parameter name. Now, these parameter blocks - # are generated on demand for any block name containing a ":". - # Please remove this fallback when it is no longer necessary. - split = block_name.rsplit("_", true, 1) - return _get_parameter_block_definition(split[0], split[1]) + block_definition = _get_obj_property_block_definition(block_name) + if block_definition != null: + return block_definition - return block_definition + # FIXME: This is a workaround for old-style output block references. + # These were generated ahead of time using a block name that has + # a "_" before the parameter name. Now, these parameter blocks + # are generated on demand for any block name containing a ":". + # Please remove this fallback when it is no longer necessary. + split = block_name.rsplit("_", true, 1) + return _get_parameter_block_definition(split[0], split[1]) func _get_base_block_definition(block_name: String) -> BlockDefinition: @@ -135,6 +139,49 @@ func _get_parameter_block_definition(block_name: String, parameter_name: String) return block_definition +func _get_obj_property_block_definition(block_name: String) -> BlockDefinition: + var block_definition: BlockDefinition + var variable: VariableDefinition + var property_name: String + var is_getter = true + + if block_name.begins_with("get_var_"): + property_name = block_name.get_slice("get_var_", 1) + elif block_name.begins_with("set_var_"): + property_name = block_name.get_slice("set_var_", 1) + is_getter = false + else: + return null + + # Getter block needs the property's variant type information by visiting the + # block_code_node's parent node because the type is not saved as a key of + # the resource in the scene file + var property_info := _get_parent_node_property_info(property_name) + if not property_info.has("type"): + return null + + if is_getter: + variable = VariableDefinition.new(property_name, property_info["type"]) + block_definition = BlocksCatalog.get_property_getter_block_definition(variable) + else: + variable = VariableDefinition.new(property_name, property_info["type"]) + block_definition = BlocksCatalog.get_property_setter_block_definition(variable) + + return block_definition + + +func _get_parent_node_property_info(property_name: String) -> Dictionary: + if not block_code_node: + return {} + + var properties := block_code_node.get_parent().get_property_list() + for property in properties: + if property["name"] == property_name: + return property + + return {} + + func _update_block_definitions(): _available_blocks.clear() _available_blocks.append_array(_get_inherited_block_definitions()) From 5c3358d3fb6ca4c2f5d5072f934cd56f7786352f Mon Sep 17 00:00:00 2001 From: Jian-Hong Pan Date: Thu, 14 Nov 2024 15:04:37 +0800 Subject: [PATCH 81/98] BlockCanvas: Only can drop properties of the BlockCode's parent node Godot allows drag any thing. However, if it is a property, block code script only manipulates the properties of BlockCode node's parent node. So, when drag a property, only allow drop the parent node's property. Fixes: 89beea94eefa ("BlockCanvas: Implement drag & drop the node's property from Inspector") https://phabricator.endlessm.com/T35649 --- addons/block_code/ui/block_canvas/block_canvas.gd | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/block_code/ui/block_canvas/block_canvas.gd b/addons/block_code/ui/block_canvas/block_canvas.gd index 9bbbe7dd..10be16db 100644 --- a/addons/block_code/ui/block_canvas/block_canvas.gd +++ b/addons/block_code/ui/block_canvas/block_canvas.gd @@ -81,8 +81,10 @@ func _can_drop_data(at_position: Vector2, data: Variant) -> bool: if typeof(data) != TYPE_DICTIONARY: return false - # Allow dropping property block + # Allow dropping property block of the block code node's parent node if data.get("type", "") == "obj_property": + if data["object"] != _context.parent_node: + return false return true var nodes: Array = data.get("nodes", []) From 8be79dc3b89b02b51b30ffd5421c96dc03b3fce6 Mon Sep 17 00:00:00 2001 From: Jian-Hong Pan Date: Tue, 19 Nov 2024 18:58:30 +0800 Subject: [PATCH 82/98] TemplateEditor: Drop unused _regex and FORMAT_STRING_PATTERN --- .../ui/blocks/utilities/template_editor/template_editor.gd | 3 --- 1 file changed, 3 deletions(-) diff --git a/addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd b/addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd index 3835961b..6958114b 100644 --- a/addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd +++ b/addons/block_code/ui/blocks/utilities/template_editor/template_editor.gd @@ -13,8 +13,6 @@ const ParameterInputScene = preload("res://addons/block_code/ui/blocks/utilities const ParameterOutput = preload("res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.gd") const ParameterOutputScene = preload("res://addons/block_code/ui/blocks/utilities/parameter_output/parameter_output.tscn") -const FORMAT_STRING_PATTERN = "\\[(?[^\\]]+)\\]|\\{(?[^}]+)\\}|(?

grfpKvz0glNE`)W?Ja=$# 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